我有这样的 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 内部执行此操作...但是必须将流程硬连接到 View 中有点难闻。我希望 URL 顺序决定首先选择什么以及它传递给什么。
最佳答案
这当然是 View 逻辑;所有 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
方法,将其缩短一点。
promise 的编辑如下。不完全是您要找的东西,但是...
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),
}
关于django - 引发 404 并继续 URL 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1299701/