python - 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 模式,以便 if project_id通过了,那么我可以使用了。

就目前而言,当我访问没有 project_id 参数的 URL 时,我得到了 404。

最佳答案

有几种方法。

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

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

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

https://stackoverflow.com/questions/14351048/

相关文章:

python - 将一对列表/元组解压缩成两个列表/元组

python - 重命名 Pandas 中的特定列

python - tight_layout() 不考虑数字字幕

linux - 在 LINUX 中确定 .a 库/存档是 32 位还是 64 位?

linux - 如何粘贴到终端?

linux - 解压 tar.gz 文件

python - 通过 'ElementTree' 在 Python 中使用命名空间解析 XML

linux - 多个 GZip 文件的快速连接

python - Python 有包/模块管理系统吗?

linux - 如何强制 'cp' 覆盖目录而不是在里面创建另一个目录?