Frage

Ich habe ein URLS -Muster wie dieses:

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'),
)

Das filtered-list und title Passen Sie die gleichen Dinge an.

Wenn es eine Liste der Dinge gibt, die dem entsprechen tag in filtered-list, Ich will list_titles abfeuern. Aber wenn es keine Übereinstimmung gibt tag, Ich möchte das so zum URL -Prozessor zurückspulen show_title feuert ab.

Wenn es keinen passenden Titel gibt, werde ich dort einen ordnungsgemäßen 404 anheben.

Ich weiß, dass ich das aus der Aussicht machen kann ... aber es ist ein bisschen stinkend, den Prozess hart in die Sicht zu verkaufen. Ich möchte, dass die URL -Bestellung entscheidet, was zuerst ausgewählt wird und worauf sie sich befreien.

War es hilfreich?

Lösung

Dies ist sicherlich Ansichtslogik; Alle URLs.py sind für die Anpassung von URL -Mustern und nicht für die Durchführung einer Validierung. Du kannst den ... benutzen Http404 Ausnahme, um dies zu behandeln.

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})

Alternativ können Sie das finden get_object_or_404 oder get_list_or_404 Methoden, die es ein wenig verkürzen.


Versprochene Bearbeitung folgt. Nicht genau das, wonach du suchst, aber ...

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),
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top