Antworten:
Der NoReverseMatch
Fehler besagt, dass Django kein passendes URL-Muster für die URL finden kann, die Sie in einer der URLs Ihrer installierten App angegeben haben.
Die NoReverseMatch-Ausnahme wird von django.core.urlresolvers ausgelöst, wenn eine übereinstimmende URL in Ihrer URLconf anhand der angegebenen Parameter nicht identifiziert werden kann.
Um mit dem Debuggen zu beginnen, müssen Sie zunächst die Fehlermeldung entfernen, die Sie erhalten haben.
NoReverseMatch unter / my_url /
Dies ist die URL, die gerade gerendert wird. Es ist diese URL, auf die Ihre Anwendung derzeit zugreifen möchte, die jedoch eine nicht übereinstimmende URL enthält
Umkehren für 'my_url_name'
Dies ist der Name der URL, die nicht gefunden werden kann
mit den Argumenten '()' und
Dies sind die Nicht-Schlüsselwort-Argumente, die der URL zur Verfügung gestellt werden
Schlüsselwortargumente '{}' nicht gefunden.
Dies sind die Schlüsselwortargumente, die der URL zur Verfügung gestellt werden
n Muster versucht: []
Dies sind die Muster, die es in Ihren urls.py-Dateien finden konnte, mit denen es übereinstimmen wollte
Suchen Sie zunächst den Code in Ihrer Quelle, der für die aktuell gerenderte URL relevant ist - die URL, die Ansicht und alle beteiligten Vorlagen. In den meisten Fällen ist dies der Teil des Codes, den Sie gerade entwickeln.
Sobald Sie dies getan haben, in der Reihenfolge durch den Code gelesen , dass django würde folgende , bis Sie die Codezeile erreichen , die für Ihr eine URL zu konstruieren versucht my_url_name
. Auch dies ist wahrscheinlich an einem Ort, den Sie kürzlich geändert haben.
Nachdem Sie festgestellt haben, wo der Fehler auftritt, können Sie das Problem anhand der anderen Teile der Fehlermeldung beheben.
urls.py
(z. B. app_name = 'my_app'
) oder wenn Sie die App in einen Namespace eingefügt haben (z. B. include('myapp.urls', namespace='myapp')
, müssen Sie den Namespace beim Umkehren einschließen, z . B. {% url 'myapp:my_url_name' %}
oder reverse('myapp:my_url_name')
.Die Argumente und Schlüsselwortargumente werden verwendet, um mit allen Erfassungsgruppen übereinzustimmen, die in der angegebenen URL vorhanden sind und durch die umgebenden ()
Klammern im URL-Muster identifiziert werden können .
Angenommen, die URL, mit der Sie übereinstimmen, erfordert zusätzliche Argumente. Sehen Sie sich die Fehlermeldung an und prüfen Sie zunächst, ob der Wert für die angegebenen Argumente korrekt ist.
Wenn sie nicht korrekt sind:
Der Wert fehlt oder eine leere Zeichenfolge
Dies bedeutet im Allgemeinen, dass der Wert, den Sie übergeben, nicht den erwarteten Wert enthält. Sehen Sie sich an, wo Sie den Wert dafür zuweisen, Haltepunkte setzen und herausfinden müssen, warum dieser Wert nicht korrekt übergeben wird.
Das Schlüsselwortargument hat einen Tippfehler
Korrigieren Sie dies entweder im URL-Muster oder in der URL, die Sie erstellen.
Wenn sie richtig sind:
Debuggen Sie den regulären Ausdruck
Sie können eine Website wie regexr verwenden, um schnell zu testen, ob Ihr Muster mit der URL übereinstimmt, die Sie erstellen möchten. Kopieren Sie das URL-Muster in das Regex-Feld oben und verwenden Sie dann den Textbereich, um alle URLs einzuschließen, die Sie für möglich halten sollte gegen passen.
Häufige Fehler:
Übereinstimmung mit dem .
Platzhalterzeichen oder anderen Regex-Zeichen
Denken Sie daran, die spezifischen Zeichen mit einem \
Präfix zu maskieren
Nur Übereinstimmung mit Klein- / Großbuchstaben
Versuchen Sie es mit entweder a-Z
oder \w
anstelle von a-z
oderA-Z
Überprüfen Sie, ob das Muster, mit dem Sie übereinstimmen, in den getesteten Mustern enthalten ist
Wenn dies nicht der Fall ist, haben Sie möglicherweise vergessen, Ihre App in die INSTALLED_APPS
Einstellung aufzunehmen (oder die Reihenfolge der Apps muss INSTALLED_APPS
möglicherweise überprüft werden).
In Django 1.10 wurde die Möglichkeit, eine URL über ihren Python-Pfad umzukehren, entfernt. Der benannte Pfad sollte stattdessen verwendet werden.
Wenn Sie das Problem immer noch nicht finden können, können Sie eine neue Frage stellen, die enthält, was Sie versucht haben, was Sie recherchiert haben (Sie können auf diese Frage verlinken), und dann den entsprechenden Code in das Problem einfügen Problem - die URL, mit der Sie übereinstimmen, alle relevanten URL-Muster, der Teil der Fehlermeldung, der anzeigt, was Django versucht hat, zu finden, und möglicherweise die INSTALLED_APPS
Einstellung, falls zutreffend.
set app_name in the app's urls.py (e.g. app_name = 'my_app')
ist der Punkt
Und stellen Sie sicher, dass Ihre Route in der Liste der Routen enthalten ist:
./manage.py show_urls | grep path_or_name
show_urls
ist keine Django-Funktion, dies beantwortet die Frage nicht.