2016-04-20 13 views
0

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?

Antwort

1

Der Versuch, success_url einzustellen, wird nicht funktionieren, weil es beim Laden des Moduls verarbeitet wird und nicht, wenn die Anforderung bearbeitet wird. Überschreiben Sie stattdessen get_success_url.

Sie können Positions- und Schlüsselwortargumente über die URL von self.args bzw. self.kwargs aufrufen.

def get_success_url(self): 
    return reverse(self.kwargs['uri']) 
+0

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? –

+0

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

+0

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 –

Verwandte Themen