Django可选url参数(Django optional url parameters)

编程入门 行业动态 更新时间:2024-10-09 09:21:48
Django可选url参数(Django optional url parameters)

我有一个这样的Django网址:

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/ and /project_config/12345abdce/都是同样有效的url模式,所以如果 project_id被传递,那么我可以使用它。 就像现在这样,如果我尝试访问没有project_id参数的url,我会得到一个404。

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:

def ProjectConfig(request, product, project_id=None, template_name='project.html'): ... # do stuff

The problem is that I want the project_id parameter to be optional.

I want /project_config/ and /project_config/12345abdce/ to be 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 when I access the URL without the project_id parameter.

最满意答案

有几种方法

一个是使用一个花哨的正则表达式(?:/(?P<title>[a-zA-Z]+)/)? 制作正则表达式Django URL令牌可选

另一个更容易遵循的方法是拥有符合您需求的多个规则,均指向相同的视图。

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

There are several approaches.

One is to use a non-capturing group in the 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), url(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

更多推荐

本文发布于:2023-08-04 18:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1419200.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:可选   参数   Django   url   parameters

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!