Django可选url参数 [英] Django optional url parameters
问题描述
我有一个这样的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屋!