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

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

问题描述

我有一个像这样的 Django URL:

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

问题是我希望 project_id 参数是可选的.

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

我希望 /project_config//project_config/12345abdce/ 是同样有效的 URL 模式,以便 if project_id 已通过,然后我可以使用它.

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.

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

As it stands at the moment, I get a 404 when I access the URL without the project_id parameter.

推荐答案

有几种方法.

一种是在正则表达式中使用非捕获组:(?:/(?P[a-zA-Z]+)/)?</code><br><a href="https://stackoverflow.com/questions/2325433/making-a-regex-django-url-token-optional">使正则表达式 Django URL 标记可选</a><em class="showen"></em></p> <p class="en">One is to use a non-capturing group in the regex: <code>(?:/(?P<title>[a-zA-Z]+)/)?</code><br> Making a Regex Django URL Token Optional</p> <p class="cn">另一种更容易遵循的方法是拥有多个符合您需求的规则,所有规则都指向同一个视图.<em class="showen"></em></p> <p class="en">Another, easier to follow way is to have multiple rules that matches your needs, all pointing to the same view.</p> <pre><code><code>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), ) </code></code></pre> <p class="cn">请记住,在您的视图中,您还需要为可选的 URL 参数设置默认值,否则会出现错误:<em class="showen"></em></p> <p class="en">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:</p> <pre><code><code>def foo(request, optional_parameter=''): # Your code goes here </code></code></pre> <p>这篇关于Django 可选的 url 参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!</p> </div> <div class="arc-body-main-more"> <span onclick="unlockarc('2632198');">查看全文</span> </div> </div> <div> </div> <div class="wwads-cn wwads-horizontal" data-id="166" style="max-width:100%;border: 4px solid #666;"></div> </div> </article> <div id="arc-ad-2" class="mb-1"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5038752844014834" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5038752844014834" data-ad-slot="3921941283"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> <div class="widget bgwhite radius-1 mb-1 shadow widget-rel"> <h5>相关文章</h5> <ul> <li> <a target="_blank" title="Django 可选 url 参数" href="/2872004.html"> Django 可选 url 参数; </a> </li> <li> <a target="_blank" title="Django可选url参数" href="/634672.html"> Django可选url参数; </a> </li> <li> <a target="_blank" title="django - 可选url参数的regex" href="/638300.html"> django - 可选url参数的regex; </a> </li> <li> <a target="_blank" title="读取可选的 url 参数" href="/2380789.html"> 读取可选的 url 参数; </a> </li> <li> <a target="_blank" title="Django:更改可选ImageField的url" href="/642888.html"> Django:更改可选ImageField的url; </a> </li> <li> <a target="_blank" title="可选参数在django中?" href="/634728.html"> 可选参数在django中?; </a> </li> <li> <a target="_blank" title="具有多个可选参数的url" href="/2048425.html"> 具有多个可选参数的url; </a> </li> <li> <a target="_blank" title="可以Flask有可选的URL参数?" href="/764296.html"> 可以Flask有可选的URL参数?; </a> </li> <li> <a target="_blank" title="url 中的可选参数 - Slim 3" href="/2378115.html"> url 中的可选参数 - Slim 3; </a> </li> <li> <a target="_blank" title="在AngularJs资源可选URL参数" href="/199722.html"> 在AngularJs资源可选URL参数; </a> </li> <li> <a target="_blank" title="Django url参数和反向URL" href="/2235075.html"> Django url参数和反向URL; </a> </li> <li> <a target="_blank" title="Flask 可以有可选的 URL 参数吗?" href="/2669034.html"> Flask 可以有可选的 URL 参数吗?; </a> </li> <li> <a target="_blank" title="瓶可选的url参数不起作用" href="/765329.html"> 瓶可选的url参数不起作用; </a> </li> <li> <a target="_blank" title="AngularJS:具有可选参数的URL路径选择" href="/203366.html"> AngularJS:具有可选参数的URL路径选择; </a> </li> <li> <a target="_blank" title="不带斜线的Angular Url和可选参数" href="/1711630.html"> 不带斜线的Angular Url和可选参数; </a> </li> <li> <a target="_blank" title="我想使用url参数作为django rest框架的可选过滤器" href="/2237241.html"> 我想使用url参数作为django rest框架的可选过滤器; </a> </li> <li> <a target="_blank" title="带可选参数的不带斜杠的 Angular Url" href="/2532851.html"> 带可选参数的不带斜杠的 Angular Url; </a> </li> <li> <a target="_blank" title="带可选参数的不带斜杠的 Angular Url" href="/2530942.html"> 带可选参数的不带斜杠的 Angular Url; </a> </li> <li> <a target="_blank" title="Django过滤多个URL参数" href="/2234774.html"> Django过滤多个URL参数; </a> </li> <li> <a target="_blank" title="Django中的URL路径参数与查询参数" href="/2048358.html"> Django中的URL路径参数与查询参数; </a> </li> <li> <a target="_blank" title="包含命名空间的 url 之前的 django url 参数" href="/2761477.html"> 包含命名空间的 url 之前的 django url 参数; </a> </li> <li> <a target="_blank" title="带有查询参数的 Django url 模板" href="/2761418.html"> 带有查询参数的 Django url 模板; </a> </li> <li> <a target="_blank" title="缓存具有URL参数的django视图" href="/636291.html"> 缓存具有URL参数的django视图; </a> </li> <li> <a target="_blank" title="Django url pattern - 带斜杠的参数" href="/642647.html"> Django url pattern - 带斜杠的参数; </a> </li> <li> <a target="_blank" title="路线GAE webapp2中的可选URL参数" href="/813340.html"> 路线GAE webapp2中的可选URL参数; </a> </li> </ul> </div> <div class="mb-1"> <script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-5038752844014834" crossorigin="anonymous"></script> <ins class="adsbygoogle" style="display:block" data-ad-format="autorelaxed" data-ad-client="ca-pub-5038752844014834" data-ad-slot="3921941283"></ins> <script> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </div> </div> <div class="side"> <div class="widget widget-side bgwhite mb-1 shadow"> <h5>Python最新文章</h5> <ul> <li> <a target="_blank" title="类型错误:只有长度为1的阵列可以尝试拟合指数的数据转换到Python标量" href="/235728.html"> 类型错误:只有长度为1的阵列可以尝试拟合指数的数据转换到Python标量; </a> </li> <li> <a target="_blank" title="bs4.FeatureNotFound:找不到一棵树建设者您所要求的功能:LXML。你需要安装一个解析器库?" href="/330648.html"> bs4.FeatureNotFound:找不到一棵树建设者您所要求的功能:LXML。你需要安装一个解析器库?; </a> </li> <li> <a target="_blank" title="系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()" href="/604206.html"> 系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all(); </a> </li> <li> <a target="_blank" title="(unicode错误)'unicodeescape'编解码器无法解码位置2-3中的字节:truncated \UXXXXXXXX escape" href="/585928.html"> (unicode错误)'unicodeescape'编解码器无法解码位置2-3中的字节:truncated \UXXXXXXXX escape; </a> </li> <li> <a target="_blank" title="将pandas dataframe中的列从int转换为string" href="/906682.html"> 将pandas dataframe中的列从int转换为string; </a> </li> <li> <a target="_blank" title="Python:由实例对象调用方法:“missing 1 required positional argument:'self'”" href="/512813.html"> Python:由实例对象调用方法:“missing 1 required positional argument:'self'”; </a> </li> <li> <a target="_blank" title="Sparksql过滤与多个条件(与where子句中选择)" href="/220716.html"> Sparksql过滤与多个条件(与where子句中选择); </a> </li> <li> <a target="_blank" title="JSONDe codeError:期待值:1行1列(CHAR 0)" href="/222506.html"> JSONDe codeError:期待值:1行1列(CHAR 0); </a> </li> <li> <a target="_blank" title="Cmake不能找到Python库" href="/516449.html"> Cmake不能找到Python库; </a> </li> <li> <a target="_blank" title="Python - 将Dataframe中的所有项目转换为字符串" href="/605332.html"> Python - 将Dataframe中的所有项目转换为字符串; </a> </li> </ul> </div> <div class="widget widget-side bgwhite mb-1 shadow"> <h5> 热门教程 </h5> <ul> <li> <a target="_blank" title="Java教程" href="/OnLineTutorial/java/index.html"> Java教程 </a> </li> <li> <a target="_blank" title="Apache ANT 教程" href="/OnLineTutorial/ant/index.html"> Apache ANT 教程 </a> </li> <li> <a target="_blank" title="Kali Linux教程" href="/OnLineTutorial/kali_linux/index.html"> Kali Linux教程 </a> </li> <li> <a target="_blank" title="JavaScript教程" href="/OnLineTutorial/javascript/index.html"> JavaScript教程 </a> </li> <li> <a target="_blank" title="JavaFx教程" href="/OnLineTutorial/javafx/index.html"> JavaFx教程 </a> </li> <li> <a target="_blank" title="MFC 教程" href="/OnLineTutorial/mfc/index.html"> MFC 教程 </a> </li> <li> <a target="_blank" title="Apache HTTP客户端教程" href="/OnLineTutorial/apache_httpclient/index.html"> Apache HTTP客户端教程 </a> </li> <li> <a target="_blank" title="Microsoft Visio 教程" href="/OnLineTutorial/microsoft_visio/index.html"> Microsoft Visio 教程 </a> </li> </ul> </div> <div class="widget widget-side bgwhite mb-1 shadow"> <h5> 热门工具 </h5> <ul> <li> <a target="_blank" title="Java 在线工具" href="/Onlinetools/details/4"> Java 在线工具 </a> </li> <li> <a target="_blank" title="C(GCC) 在线工具" href="/Onlinetools/details/6"> C(GCC) 在线工具 </a> </li> <li> <a target="_blank" title="PHP 在线工具" href="/Onlinetools/details/8"> PHP 在线工具 </a> </li> <li> <a target="_blank" title="C# 在线工具" href="/Onlinetools/details/1"> C# 在线工具 </a> </li> <li> <a target="_blank" title="Python 在线工具" href="/Onlinetools/details/5"> Python 在线工具 </a> </li> <li> <a target="_blank" title="MySQL 在线工具" href="/Onlinetools/Dbdetails/33"> MySQL 在线工具 </a> </li> <li> <a target="_blank" title="VB.NET 在线工具" href="/Onlinetools/details/2"> VB.NET 在线工具 </a> </li> <li> <a target="_blank" title="Lua 在线工具" href="/Onlinetools/details/14"> Lua 在线工具 </a> </li> <li> <a target="_blank" title="Oracle 在线工具" href="/Onlinetools/Dbdetails/35"> Oracle 在线工具 </a> </li> <li> <a target="_blank" title="C++(GCC) 在线工具" href="/Onlinetools/details/7"> C++(GCC) 在线工具 </a> </li> <li> <a target="_blank" title="Go 在线工具" href="/Onlinetools/details/20"> Go 在线工具 </a> </li> <li> <a target="_blank" title="Fortran 在线工具" href="/Onlinetools/details/45"> Fortran 在线工具 </a> </li> </ul> </div> </div> </div> <script type="text/javascript">var eskeys = 'django,可选,的,url,参数'; var cat = 'cc';';//python</script> </div> <div id="pop" onclick="pophide();"> <div id="pop_body" onclick="event.stopPropagation();"> <h6 class="flex flex101"> 登录 <span onclick="pophide();">关闭</span> </h6> <div class="pd-1"> <div class="wxtip center"> <span>扫码关注<em>1秒</em>登录</span> </div> <div class="center"> <img id="qr" src="https://huajiakeji.com/Content/Images/qrydx.jpg" alt="" style="width:150px;height:150px;" /> </div> <div style="margin-top:10px;display:flex;justify-content: center;"> <input type="text" placeholder="输入验证码" id="txtcode" autocomplete="off" /> <input id="btngo" type="button" onclick="chk()" value="GO" /> </div> <div class="center" style="margin: 4px; font-size: .8rem; color: #f60;"> 发送“验证码”获取 <em style="padding: 0 .5rem;">|</em> <span style="color: #01a05c;">15天全站免登陆</span> </div> <div id="chkinfo" class="tip"></div> </div> </div> </div> <script type="text/javascript" src="https://lib.sinaapp.com/js/jquery/1.9.1/jquery-1.9.1.min.js"></script> <script type="text/javascript" src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script> <script type="text/javascript" src="https://img01.yuandaxia.cn/Scripts/highlight.min.js"></script> <script type="text/javascript" src="https://img01.yuandaxia.cn/Scripts/base.js?v=0.22"></script> <script type="text/javascript" src="https://img01.yuandaxia.cn/Scripts/tui.js?v=0.11"></script> <footer class="footer"> <div class="container"> <div class="flink mb-1"> 友情链接: <a href="https://www.it1352.com/" target="_blank">IT屋</a> <a href="https://huajiakeji.com/" target="_blank">Chrome插件</a> <a href="https://www.cnplugins.com/" target="_blank">谷歌浏览器插件</a> </div> <section class="copyright-section"> <a href="https://www.it1352.com" title="IT屋-程序员软件开发技术分享社区">IT屋</a> ©2016-2022 <a href="http://www.beian.miit.gov.cn/" target="_blank">琼ICP备2021000895号-1</a> <a href="/sitemap.html" target="_blank" title="站点地图">站点地图</a> <a href="/Home/Tags" target="_blank" title="站点标签">站点标签</a> <a target="_blank" alt="sitemap" href="/sitemap.xml">SiteMap</a> <a href="/1155981.html" title="IT屋-免责申明"><免责申明></a> 本站内容来源互联网,如果侵犯您的权益请联系我们删除. </section> <!--统计代码--> <script type="text/javascript"> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?0c3a090f7b3c4ad458ac1296cb5cc779"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script> <script type="text/javascript"> (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </div> </footer> </body> </html>