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

回到顶部