Ich versuche, optionale URL-Muster in mein Django-Projekt aufzunehmen, indem ich das in dieser SO post erläuterte Muster für mehrere Routen anpasst.Django URL Multiple-Routen Muster Nicht injektiv
In meiner urls.py
Datei habe ich die folgenden Muster.
urlpatterns = [
url(r'^(?P<slug>[-\w]+)\/?$', View.as_view()),
url(r'^(?P<section>[-\w]+)\/(?P<slug>[-\w]+)\/?$', View.as_view()),
url(r'^(?P<section>[-\w]+)\/(?P<tag>[-\w]+)\/(?P<slug>[-\w]+)\/?$',View.as_view()),
]
Die Parameter section
, tag
und slug
entsprechen Feldern zu modellieren. So gibt eine HTTP-Anfrage an /foo/bar/baz
eine Modellinstanz mit einem "foo" Abschnitt, "bar" Tag und "baz" Slug zurück. Nicht alle Modellinstanzen haben eine section
oder tag
, diese Parameter sind optional.
Wenn Sie den URL-Dispatcher als eine Funktion mit einer Domäne von URLs und einer Codomain von Modellinstanzen betrachten, ist das Muster, das ich verwende, keine injektive Funktion. /baz
, /foo/baz
und /foo/bar/baz
geben dieselbe Modellinstanz zurück, aber nur die letzte URL sollte die Modellinstanz zurückgeben.
Kurz gesagt, wie konfiguriere ich meine , um mein foo-bar-baz-Modell zurückzugeben, wenn und nur wenn die angeforderte URL /foo/bar/baz
ist?
warum akzeptierst du nicht einfach die url als eine regex und teilst sie dann mit/und tust was du machen willst? –