Django可选url参数

我有一个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&lt;title&gt;[a-zA-Z]+)/)?
使Regex-Django URL令牌成为可选的

另一种更容易遵循的方法是,有多个符合您需要的规则,所有这些规则都指向同一个视图

urlpatterns=模式(“”,
url(r“^project\u config/$”,views.foo),
url(r“^project\u config/(?P&lt;product&gt;\w+/$”,views.foo),
url(r“^project\u config/(?P&lt;product&gt;\w+)/(?P&lt;project\u id&gt;\w+)/$”,views.foo),
)

请记住,在视图中,还需要为可选URL参数设置默认值,否则会出现错误:

def foo(请求,可选参数=“”):
#你的密码在这里

发表评论