Django可选url参数 [英] Django optional url parameters

查看:539
本文介绍了Django可选url参数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个这样的Django网址:

I have a Django url like this:

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

和我的views.py:

and my 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。

The problem is that I want the project_id parameter to be optional. I would like that /project_config/ and /project_config/12345abdce/ are both equally valid url patterns, so that IF project_id is passed, then I can use it. As it stands at the moment, I get a 404 if I try to access the url without the project_id parameter.

推荐答案

有几种方法。

一个是使用一个花哨的正则表达式... (? /(?P< title> [a-zA-Z] +)/)?

制作正则表达式Django URL令牌可选

One is to use a fancy regex... (?:/(?P<title>[a-zA-Z]+)/)?
Making a Regex Django URL Token Optional

另一个更容易遵循的方法是多个规则匹配您的需求,都指向相同的视图。

Another, easier to follow way is to have multiple rules that matches your needs, all pointing to the same view.

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),
)

请记住,在您看来,您还需要为可选网址设置默认值参数,否则您将收到错误:

Keep in mind that in your view you'll also need to set a default for the optional URL parameter, or you'll get an error:

def foo(request, optional_parameter=''):
    # Your code goes here

这篇关于Django可选url参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆