我有一个这样的 Django URL:
url(
r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$',
'tool.views.ProjectConfig',
name='project_config'
),
views.py:
def ProjectConfig(request, product, project_id=None, template_name='project.html'):
...
# do stuff
问题是我希望 project_id
参数是可选的。
我希望 /project_config/
和 /project_config/12345abdce/
是同样有效的 URL 模式,以便 if project_id
通过了,那么我可以使用了。
就目前而言,当我访问没有 project_id
参数的 URL 时,我得到了 404。
最佳答案
有几种方法。
一种是在正则表达式中使用非捕获组:(?:/(?P<title>[a-zA-Z]+)/)?
Making a Regex Django URL Token Optional
另一种更容易遵循的方法是拥有多个符合您需求的规则,所有规则都指向同一个 View 。
urlpatterns = patterns('',
url(r'^project_config/$', views.foo),
url(r'^project_config/(?P<product>\w+)/$', views.foo),
url(r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$', views.foo),
)
请记住,在您看来,您还需要为可选的 URL 参数设置默认值,否则您会收到错误消息:
def foo(request, optional_parameter=''):
# Your code goes here
https://stackoverflow.com/questions/14351048/