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传递,然后我可以使用它。因为它的立场,我得到一个404,如果我尝试访问没有project_id参数的url。

有几种方法。

一个是使用花式正则表达式(?:/(?P< title> [a-zA-Z])/)?
Making a Regex Django URL Token Optional

另一个更容易遵循的方式是有多个匹配你的需求的规则,所有的指向同一个视图。

urlpatterns = patterns('',
    url(r'^project_config/$', views.foo),
    url(r'^project_config/(?P<product>\w+)/$', views.foo),
    ulr(r'^project_config/(?P<product>\w+)/(?P<project_id>\w+)/$', views.foo),
)

请注意,在您的视图中,您还需要为可选网址参数设置默认值,否则会出现错误:

def foo(request, optional_parameter=''):
    # Your code goes here
http://stackoverflow.com/questions/14351048/django-optional-url-parameters

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:Django可选的url参数