小编典典

Django 可选 url 参数

all

我有一个这样的 Django URL:

url(
    r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$',
    'tool.views.ProjectConfig',
    name='project_config'
),

视图.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。


阅读 61

收藏
2022-06-27

共1个答案

小编典典

有几种方法。

一种是在正则表达式中使用非捕获组: (?:/(?P<title>[a-zA-Z]+)/)?

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

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
2022-06-27