首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >提升404并继续URL链

提升404并继续URL链
EN

Stack Overflow用户
提问于 2009-08-19 12:46:18
回答 1查看 37.4K关注 0票数 39

我有一个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-listtitle匹配相同的东西。

如果有与filtered-list中的tag匹配的可用列表,我希望list_titles启动。但是如果没有匹配的tag,我想把它冒泡回URL处理器,这样show_title就会启动。

如果没有匹配的标题,我将在那里设置一个适当的404。

我知道我可以在view...but内部完成这项工作,但将进程硬连接到视图中有点难闻。我想要的URL顺序来决定什么是首先选择和它交给什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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_404get_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),
}
票数 56
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1299701

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档