我有一个URL模式,如下所示:
urlpatterns = (
url(r'^$', list_titles, name='list'),
url(r'^(?P<tag>[a-z\-0-9]+?)/$', list_titles, name='filtered-list'),
url(r'^(?P<title>\S+?)/$', show_title, name='title'),
)
filtered-list
和title
匹配相同的东西。
如果有与filtered-list
中的tag
匹配的可用列表,我希望list_titles
启动。但是如果没有匹配的tag
,我想把它冒泡回URL处理器,这样show_title
就会启动。
如果没有匹配的标题,我将在那里设置一个适当的404。
我知道我可以在view...but内部完成这项工作,但将进程硬连接到视图中有点难闻。我想要的URL顺序来决定什么是首先选择和它交给什么。
发布于 2009-08-19 12:53:11
这当然是视图逻辑;所有的urls.py都是用于匹配URL模式,而不是执行验证。您可以使用Http404
异常来处理此问题。
from django.http import Http404
def detail(request, poll_id):
try:
p = Poll.objects.get(pk=poll_id)
except Poll.DoesNotExist:
raise Http404
return render_to_response('polls/detail.html', {'poll': p})
或者,您可能会找到get_object_or_404
或get_list_or_404
方法,它们会稍微缩短一些时间。
承诺的编辑如下。不完全是你想要的但是..。
urlpatterns = (
url(r'^$', list_titles, name='list'),
)
if 1=1: # Your logic here
urlpatterns += ( url(r'^$', list_titles, name='list'), )
urlpatterns += (
url(r'^(?P<title>\S+?)/$', show_title, name='title'),
url(r'^spam/$', spam_bar),
url(r'^foo/$', foo_bar),
}
https://stackoverflow.com/questions/1299701
复制相似问题