这当然是视图逻辑;所有 urls.py 用于匹配 URL 模式,而不是执行验证。您可以使用Http404 http://docs.djangoproject.com/en/dev/topics/http/views/#the-http404-exception处理这个异常。
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 http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#get-object-or-404 or get_list_or_404 http://docs.djangoproject.com/en/dev/topics/http/shortcuts/#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),
}