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
以上是 Django可选的url参数 的全部内容, 来源链接: utcz.com/qa/418161.html