31 Stimmen

Django: "Umkehrung nicht gefunden"

Ich habe eine Zeile in einem Django-Formular:

{% for aa in my_array %}

die diesen Fehler auszulösen scheint:

Fehler in der Vorlage

Beim Rendern ist eine Ausnahme aufgetreten: Reverse für 'dev_env.profiles.views.viewPlan' mit Argumenten '('',)' und Schlüsselwort Argumente '{}' nicht gefunden.

Was bedeutet diese Fehlermeldung wirklich?

Ich vermute, dass entweder die Zeile richtig ist, aber die Fehlermeldung falsch ist. Oder der Fehler ist echt, aber diese Zeile ist ein Ablenkungsmanöver.

Wonach in aller Welt sollte ich suchen?

Aktualisierung: Paulo hat das unten geklärt.

In der Tat hatte ich eine {% url viewPlan planId %} ein paar Zeilen entfernt (die gemeldete Fehlerzeile war also falsch), aber der Fehler wurde ausgelöst, weil planId in diesem Fall leer war.

49voto

Paolo Bergantino Punkte 465120

Haben Sie eine Ansicht mit dem Namen viewPlan mit dem Sie so etwas in einer Vorlage machen:

{% url viewPlan %}

oder etwas Ähnliches in einer Ansicht:

reverse('viewPlan')

Wenn Sie das tun und keine Zeile erhalten, die so aussieht:

url(r'^whatever/url/$', 'dev_env.profiles.views.viewPlan', name="viewPlan"),

...in Ihrer url-Konfiguration würde ich vermuten, dass das der Fehler ist, den Sie erhalten. Alternativ und wahrscheinlicher ist, dass Sie wahrscheinlich einen Wert (vielleicht id oder etwas) in der viewPlan-URL erfassen, aber nicht ein Argument übergeben, wenn Sie die URL umkehren. Also, wenn Sie alle Werte in der Regex erfassen, wie dies:

url(r'^plans/(\d+)$', 'dev_env.profiles.views.viewPlan', name="viewPlan"),

Sie müssen es so nennen:

{% url viewPlan 15 %}

Oder so:

reverse('viewPlan', args=[15]);

Donde 15 ist natürlich das, was der erfasste Wert erwarten lässt.

0 Stimmen

Danke, das hat mich auf den richtigen Weg gebracht. Es war eigentlich nur das Argument, das ich in der {% url war leer in diesem Zusammenhang.Cheers

1 Stimmen

Den gleichen Fehler erhalten Sie auch, wenn Sie "viewPlan" durch "viewPan" ersetzen.

6 Stimmen

+1 für "reverse('viewPlan', args=[15])" dieses verdammte args[] !!

11voto

C.K. Punkte 3076

Manchmal muss das app_label in das Argument name aufgenommen werden

wie bei der Definition von app_name='core' in Ihrer core.urls

dann umgekehrt die viewPlan Pfad wäre:

reverse('core:viewPlan', args=[15]);

0 Stimmen

Dies hat mir geholfen, das gleiche Problem zu lösen, als ich Ansichten aus mehreren Anwendungen hatte und versuchte, zur Ansicht in einer anderen Anwendung umzuleiten.

3voto

maccaroo Punkte 799

Ich hatte das gleiche Problem. In meinem Fall hatte ich vergessen, die Urls für die Child-App in der Hauptdatei urls.py hinzuzufügen:

urlpatterns = [
    re_path("admin/", admin.site.urls),
    re_path(r"^core/", include("core.urls")),
    re_path(r"^$", welcome, name="welcome")
]

0 Stimmen

Das hat mein Problem gelöst. ich brauchte einen Weg zur Child-URL. danke

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X