django - 引发 404 并继续 URL 链

标签 django django-urls django-views django-signals

我有这样的 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 内部执行此操作...但是必须将流程硬连接到 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_404get_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/

相关文章:

python - Django - 电子邮件发送两次

python - Django 中字母数字(slug)字符串的 URL 模式

python - Django uniqe 按日期查询集过滤

Python 错误 : name 'admin' is not defined

python - 删除对象时从媒体中删除图像

python - Django - 403 Forbidden - CSRF token 丢失或不正确

python - 在 Django 中调用 .delay() 后 celery 任务挂起

python - Django+gunicorn+nginx telegram webhook ssl 麻烦

mysql - Django MySQL 'utf8' 目前是字符集UTF8MB3的别名,将被UTF8MB4取代

django - Django 项目 urls.py 中应用程序 URI 的别名