Wie verwende ich mit einer Funktionsreferenz anstelle eines benannten URL-Muster django.core.urlresolvers.reverse?

StackOverflow https://stackoverflow.com/questions/134629

  •  02-07-2019
  •  | 
  •  

Frage

In meiner urls.py Datei, die ich habe:

from myapp import views
...
(r'^categories/$', views.categories)

Wo categories ist eine Ansicht, Funktion innerhalb myapp/views.py. Keine andere URLconf Linien verweisen views.categories.

In einer Unit-Test-Datei, ich versuche, diese URL zu greifen django.core.urlresolvers.reverse() verwenden, anstatt nur das Kopieren '/ categories /' (DRY und all das). Also, ich habe:

from django.core.urlresolvers import reverse
from myapp import views
...

url = reverse(views.categories)

Wenn ich meine Tests ausführen, erhalte ich einen NoReverseMatch Fehler:

NoReverseMatch: Reverse for '<function categories at 0x1082f30>' with arguments '()' and keyword arguments '{}' not found.

Es passt ganz gut, wenn ich das URL-Muster ein benanntes Muster machen, wie folgt aus:

url(r'^categories/$', views.categories, 'myapp-categories')

Und verwenden Sie das Mustername, es zu entsprechen:

url = reverse('myapp-categories')

Aber soweit ich von der reverse Dokumentation kann sagen, , ich soll es nicht nur ein benannte URL-Muster vornehmen muß reverse verwenden.

Alle Ideen, was ich falsch mache?

War es hilfreich?

Lösung 2

Nach dem weitere Untersuchung stellt sich heraus, es war ein Problem mit, wie ich die Ansichten Modul wurde importieren:

Wie gehe ich erfolgreich eine Funktion Bezug auf Djangos reverse () Funktion?

Danke für die Hilfe aber, Jungs. Sie hat mich inspiriert, es zu betrachten richtig

Andere Tipps

Jack M. Beispiel ist fast richtig.

Es muss eine URL-Funktion, kein Tupel sein, wenn Sie benannte URLs verwenden möchten.

url(r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),

Dies funktioniert, und der gesamte Code, den Sie eingefügt haben, ist richtig und funktioniert gut (ich es einfach in einen sauberen Test / Projekt App kopiert und umgekehrt die URL ohne Probleme). So ist es etwas anderes geht hier vor, dass Sie nicht uns gezeigt. Vereinfachen bis hinunter zu den ersten Grundlagen, bis es funktioniert, dann beginnen die Komplexität zu erhöhen zurück in und sehen, wo es bricht.

Sie können aber auch „./manage.py Shell“ tun und importieren Sie dann interaktiv die Reverse-Funktion und Ihre View-Funktion und versuchen, das Gegenteil. Das wird den Testaufbau als eine mögliche Ursache entfernen.

Die Reverse-Funktion tatsächlich nutzt den „Namen“ der URL. Dies ist definiert wie folgt:

urlpatterns = patterns('',
    (r'^no_monkeys/$', 'views.noMonkeys', {}, "no-monkeys"),
    (r'^admin/(.*)', admin.site.root),
)

Nun würden rufen Sie mit der Zeichenfolge „No-Affen“ reverse die korrekte URL zu erhalten.

Ninja Edit: Hier ist ein Link die django docs zu dem Thema.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top