2016-06-02 10 views
0

ich verwende reverse_lazy folgendSenden Argument in reverse_lazy django - Python

def index: 
    if firstTimeLogin == 0: 

     response = HttpResponseRedirect(reverse_lazy('abc', args={'cid': 0})) 
    else: 

     response = HttpResponseRedirect(reverse_lazy('abc', args={'cid': 1})) 

abc Ansicht

def abc(request, userid = None, cid =1): 
    return HttpResponse(cid) 

urls.py

url(r'^abc/$', views.abc, name='abc'), 
url(r'^abc/(?P<userid>.*)/$', views.abc, name='abc'), 
url(r'^abc/(?P<cid>.*)/$', views.abc, name='abc'), 

Wenn ich jetzt weitergeleitet zu def abc durch reverse_lazy bekomme ich URL wie: baseurl/appname/abc/cid, hier weiß ich nicht, wie ich va holen kann lue von cid.

Bitte korrigieren Sie, wenn ein anderer Ansatz erforderlich ist. Ich muss nur etwas Argument übergeben reverse_lazy die ich

verweis in def abc

Update holen wollen, was romaan sagt: Ich habe aktualisiert: urls.py als:

url(r'^abc/(?P<cid>.*)/$', views.abc, name='abcfirst') 

und umleiten als:

response = HttpResponseRedirect(reverse_lazy('abcfirst', args={'cid': 1})) 

immer noch kann ich nicht auf Argumente zugreifen, die ich durch reverse_lazy sende.

+1

'name', die Sie geben, sollte die URL Route anstatt die Ansicht zu identifizieren. Daher vorzuziehen, verschiedene Namen in URL zu verwenden und jede Verwirrung zu vermeiden – Romaan

Antwort

2

Sie haben zwei URLs, die denselben Namen haben und dieselben Parameter (denselben Regex) verwenden.

Sie können diese beiden nicht kombinieren, um die Ansicht in beiden aufzunehmen, das ist nicht wie Django funktioniert.

entweder Sie müssen

  • eine URL her
  • Machen separate Ansichten

Aber so oder so in zwei Parameter nimmt, können Sie nicht den gleichen Namen für unterschiedliche URLs verwenden.

0

ersetzen args mit kwargs in Parameter reverse_lazy Funktion:

response = HttpResponseRedirect(reverse_lazy('abcfirst', kwargs={'cid': 1}))