Also zunächst gebe ich zu, ich benutze CBV in Django und ich verstehe es nicht vollständig.Hinzufügen von zusätzlichen Parameter zu Django-Klasse basierte Ansicht
Ich habe eine Ansicht löschen umgesetzt mit CBV - Ich versuche, zusätzliche Parameter uri (dieser Parameter eine aktuelle URL ist, von wo berufen worden löschen passieren, auf diese Weise nach dem Benutzer zur gleichen zurückkehren ausgeführt wird erhalten löschen Platz, von wo aus er gestartet.)
Das ist mein url.py
url(r'^category/delete/(?P<pk>\d+)/(?P<uri>\S+)/$', item.views.CategoryDelete.as_view(),
name='category_delete',),
und das ist mein view.py ich vererben bin löschen Ansicht Funktionalität
class CategoryDelete(DeleteView):
model = Category
success_url = reverse_lazy(uri)
def delete(self, uri, request, *args, **kwargs):
try:
return super(CategoryDelete, self).delete(
request, *args, **kwargs
)
except models.ProtectedError as e:
return HttpResponse(json.dumps(escape(e)))
Der aktuelle Code gibt mir offensichtlich einen Fehler, dass uri nicht definiert ist. Also die Frage ist, wie zusätzliche Parameter in die View-Klasse übertragen werden, wenn ich success_url verwenden möchte? Oder gibt es einen besseren Weg?
danke ich dachte, ich kann es nicht tun, da ich Instanz zuerst erstellen muss. Wenn ich Ihren Code versuche ich diese Störung erhalte: Ausnahmetyp: \t NoReverseMatch Ausnahmewert: \t umge für ‚uri‘ mit Argumenten ‚()‘ und Keyword-Argumente ‚{}‘ nicht gefunden. 0 Muster (s) versucht: [] Sollte ich auch einige Änderungen in meinem url.py vornehmen? –
Wenn Sie 'reverse' verwenden, sollte' uri' der Name des URL-Musters sein. Wenn es kein URL-Mustername ist, sollten Sie "reverse" überhaupt nicht verwenden. Beachten Sie, dass es üblich ist, die nächste URL als GET-Parameter zu verwenden, z. '? next =/home /', anstatt in der URL selbst. – Alasdair
Ich brauche ganze URL, da ich Filter verwende, so dass meine Benutzer nur mit Daten arbeiten, die sie gefiltert haben, und Filterparameter sind in URL Wenn ich rückwärts verwende, werde ich die Filterwerte verlieren –