Django可选的url参数

发布于 2021-01-29 14:57:58

我有一个像这样的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 。

关注者
0
被浏览
75
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    有几种方法。

    一种是在正则表达式中使用非捕获组:使正则 (?:/(?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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看