Django可选的url参数
我有一个像这样的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模式,以便 如果
project_id
通过, 那么 我可以使用它。
就目前而言,访问不带project_id
参数的URL时会得到404 。
-
有几种方法。
一种是在正则表达式中使用非捕获组:使正则
(?:/(?P<title>[a-zA-Z]+)/)?
表达式Django URL令牌为可选另一种更容易遵循的方法是拥有多个符合您需求的规则,所有规则都指向同一视图。
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