django - 没有参数的url采用默认值

时间:2013-12-02 00:12:32

标签: django django-views django-urls

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

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

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

1 个答案:

答案 0 :(得分:12)

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

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

然后在视图中声明参数的默认值:

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

如果您发现该网址格式很难看,您可以将两个正则表达式绑定到同一个视图函数:

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

根据阿拉斯戴尔的提醒,我删除了领先的斜线。我觉得这看起来很奇怪。