我有这样的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,我想用泡沫把它发回网址处理器,这样show_title就会触发.

如果没有相匹配的头衔,我会在那里加薪404.

我知道我可以在视野内做到这一点...但把过程硬连接到视图中有点难闻.我希望URL顺序决定首先 Select 什么,然后交给什么.

推荐答案

这当然是视图逻辑;所有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相关问答推荐

获取PyCharm中继承方法的未解析属性引用

如何连接到 docker 容器中的 postgres 数据库?

Django - 使用在 URL 中传递的父类主键从子类中过滤对象

Django - 站点匹配查询不存在

django 管理员登录突然要求 csrf 令牌

django 在 ubuntu 中安装在哪里

Django populate() 不可重入

在 virtualenv Ubuntu 12.10 中使用 pip 安装 lxml 错误:command 'gcc' failed with exit status 4

如何在 django admin 中显示布尔属性

django 表单为关键字参数获取了多个值

django admin 排序外键字段列表

Django:如何过滤属于特定组的用户

更改 Django ModelChoiceField 以显示用户的全名而不是用户名

响应发送到客户端后在 Django 中执行代码

Django Admin:如何在内联中显示模型上定义的属性?

ModelForm 上的 Django 和字段集

Django 模型(1054,Unknown column in 'field list')

运行单元测试时禁用 Django South?

判断列表 django 模板中是否存在

ValueError: 无法解析相关模型 u'app.model'