【问题标题】:django - url with no argument to take a default valuedjango - 没有参数的 url 采用默认值
【发布时间】:2013-12-17 14:35:05
【问题描述】:

假设这是一个url,它接受一个参数(这里是book_id)并将值传递给views

url(r'^/(?P<book_id>\w+)/$', 'pro.views.book', name='book'),

url是否可以带参数,但是,如果没有参数,则采用默认值。如果可能的话,也可以在views 中。如果这是一个蹩脚的问题,我很抱歉,但我真的需要知道。任何帮助或建议将不胜感激。谢谢

【问题讨论】:

标签: django django-views django-urls


【解决方案1】:

使捕获模式可选,并记住适当地处理尾部斜杠。我会在捕获组周围找到一个非捕获组是最安全的方法:

url(r'^(?:(?P<book_id>\w+)/)?$', 'pro.views.book', name='book'),

然后在视图中,为参数声明一个默认值:

def book(request, book_id='default'):

如果您发现 URL 模式丑陋,您可以将两个正则表达式绑定到同一个视图函数:

url(r'^(?P<book_id>\w+)/$', 'pro.views.book', name='book'),
url(r'^$', 'pro.views.book', name='default_book'),

根据 Alasdair 的提醒,我删除了开头的斜线。我觉得这看起来很奇怪。

【讨论】:

  • +1 包括这两种方法,我个人更喜欢两个正则表达式
  • 是的,我自己也倾向于使用这种方法——尽管这部分是因为我通常懒得刷新对非捕获组语法的记忆。
  • 哇!我永远不会想到这一点。非常感谢!
猜你喜欢
  • 2011-05-06
  • 2021-10-09
  • 1970-01-01
  • 2017-06-27
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 2021-07-05
相关资源
最近更新 更多