Django:我如何让URL的一部分可选

时间:2012-12-11 23:29:59

标签: django django-urls

我有一个网址,我想让状态标记可选。如果url中没有提供状态标记,我在view方法参数中给出一个默认值。我尝试使用此(?:/(?P<status>\d+))?$替换令牌,但似乎效果不佳。感谢

url(r'^(?P<status>\d+)/$', frequest_list, name="frequest_list"),

def request_list(request, status=1):
 ...
 ...

更新: 这就是我尝试的模式:

url(r'^(?:/(?P<status>\d+))?$', frequest_list, name="frequest_list"),

所以,如果我尝试localhost/features/效果很好

但如果我做localhost/features/1/则失败

2 个答案:

答案 0 :(得分:3)

只需创建一个调用相同视图的第二个url条目:

url(r'^features/$', frequest_list, name="frequest_list_default"),
url(r'^features/(?P<status>\d+)/$', frequest_list, name="frequest_list"),

答案 1 :(得分:1)

我在一些项目中使用单个url可选捕获,它们工作正常。您可能希望调整模式以使尾随/可选。我认为这是导致你的网址不匹配的原因。 Django确实有一个“APPEND_SLASH”设置bool,如果它们丢失并且不匹配,会将其添加到您的URL:

url(r'^features(?:/(?P<status>\d+))?/?$', frequest_list, name="frequest_list")

可选/也可能这样写:

url(r'^features/?(?:(?P<status>\d+)/?)?$', frequest_list, name="frequest_list")