Wie bekomme ich eine umgekehrte URL für eine generische Ansicht?

8

Hier ist die Frage, wie verwende ich Reverse für die generische Ansicht object_detail?

Wenn ich es wie folgt benutze, lautet die Fehlermeldung: NoReverseMatch at / Kommentar / hinzufügen / Reverse für '' with arguments '()' und Schlüsselwortargumente '{}' nicht gefunden.

in views.py:

%Vor%

in urls.py

%Vor%     
Jacky 03.04.2009, 07:32
quelle

3 Antworten

18

Die einzige Möglichkeit, umgekehrte Versionen für generische Ansichten zu verwenden - benannte URLs config.

%Vor%     
Alex Koshelev 03.04.2009, 08:21
quelle
3

Diese Frage scheint für ältere Versionen von Django zu sein. Ich weiß nicht, wie die alten generischen Ansichten funktionieren. Aber die neuen klassenbasierten allgemeinen Ansichten haben das gleiche Problem.

Das Umkehren funktioniert nicht "out of the box", weil View.as_view () jedes Mal eine andere Wrapper-Funktion zurückgibt und sie nicht gleich miteinander verglichen werden. Daher kann reverse () die umgekehrte Route nicht finden durch den Vergleich von zwei Funktionen, die nicht gleich sind.

Es gibt einen anderen Weg, obwohl es nicht Standard ist. Dies ist, was ich für meine klassenbasierten Ansichten tue:

%Vor%

In diesem Fall verwende ich plain_view , um die von as_view() ohne Argumente zurückgegebene Ansicht zu bezeichnen. Wenn Sie Argumente an as_view() übergeben, unterscheidet sich der Wrapper, der zurückgegeben wird, von dem einfachen. Wenn Sie beide benötigen, müssen Sie sie verschiedenen Eigenschaften zuweisen:

%Vor%

Sie können auf diese Ansichtsattribute in urls.py :

verlinken %Vor%

und dann können Sie sie umkehren, indem Sie die Ansichtsattribute umkehren:

%Vor%     
qris 06.12.2012 15:14
quelle
0

Ich fand die beste Lösung, verwenden Sie reverse_lazy ():

Ссылка

    
dspjm 02.04.2014 02:46
quelle

Tags und Links