我有一个Django URL,如下所示:
url(
r“^project\U config/(?P<;product>;\w+)/(?P<;project\U id>;\w+)/$”,
'tool.views.ProjectConfig',
name='project\u config'
),
视图。py:
def ProjectConfig(请求、产品、项目id=None、模板\u name='project.html'):
...
#做事
问题是我希望project\u id参数是可选的
我希望/project\u config/和/project\u config/12345abdce/是同样有效的URL模式,这样如果传递了<project\u id,那么我就可以使用它
目前,当我访问URL时没有project\u id参数,我得到了404
有几种方法
一种是在正则表达式中使用非捕获组:(?:/(?p<;title>;[a-zA-Z]+)/)?
使Regex-Django URL令牌成为可选的
另一种更容易遵循的方法是,有多个符合您需要的规则,所有这些规则都指向同一个视图
urlpatterns=模式(“”,
url(r“^project\u config/$”,views.foo),
url(r“^project\u config/(?P<;product>;\w+/$”,views.foo),
url(r“^project\u config/(?P<;product>;\w+)/(?P<;project\u id>;\w+)/$”,views.foo),
)
请记住,在视图中,还需要为可选URL参数设置默认值,否则会出现错误:
def foo(请求,可选参数=“”):
#你的密码在这里