2016-07-01 18 views
0

Ich bin neu in Django!Django, GET-Parameter in der URL nach einem POST-Aufruf beibehalten

ich eine einfache Anmeldeformular machte, wenn es eingereicht wird, ist es ein Etikett auf die vorherige Seite zurückkehrt, ist, dass die Haupt-Seite:

<form method="post""> 
:

Die Form wie diese eingereicht

Und seine in urls.py abgebildet:

url(r'^userfilt/insertForm/$', views.insertForm, name='insertForm') 

All urls.py Datei:

app_name = 'SSO_Management_POC' 
urlpatterns = [ 
    url(r'^$', views.IndexView.as_view(), name='index'), 
    url(r'^user/$', views.user, name='user'), 
    url(r'^userfilt/$', views.userfilt, name='userfilt'), 
    url(r'^userfilt/insertForm/$', views.insertForm, name='insertForm'), 
    #url(r'^updateForm/$', views.updateForm, name='updateForm'), 
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'), 
    url(r'^(?P<pk>[0-9]+)/results/$', views.ResultsView.as_view(), name='results'), 
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'), 
] 

So der damit verbundene „def“ sein Name:

def insertForm(request): 
    if request.method == 'POST': 
    #some stuff here  
    #sending the get parameter to the main page: 
    return redirect('/SSO_Management_POC/userfilt/?label=User Registered!') 

jetzt, wenn ich auf die Hauptseite leite ich wie etwas sehen werden: enter image description here

Jetzt will ich einfach weiter so arbeiten, ich ‚ll einen Filter in den Eingang gestellt und ich eine Suche durchführen, unter dem Code:

if request.method == 'POST': 
     form = UserForm(data=request.POST) 
     val = request.POST.get('my_textarea') 
     return render(request, 'SSO_Management_POC/userfilt.html', {'top_user': TopUser.objects.filter(user_name__regex=val)}) 

Wie Sie ein POST Anruf zu sehen ist, aber es kommt die Frage, GET-Parameter ist immer noch da, so th Ursache ist enter image description here

Und natürlich will ich nicht mehr dort das Etikett, es nach einem weiteren Anruf ...

und die URL sieht immer noch wie diese verschwinden soll:

http://127.0.0.1:8000/SSO_Management_POC/userfilt/?label=User%20Registered!

Jetzt weiß ich, dass ich dies mit Abhilfe Vorderendseite lösen kann, aber ich würde gerne wissen:

  1. Gibt es etwas, das nicht gut, da Ablauf von Operationen ist?
  2. Wie kann ich das beheben? Wo bin ich falsch ..?
  3. Ich habe versucht, nach etwas zu suchen, um den get-Parameter in der URL zu bereinigen, oder um ihn zurückzusetzen, weil ich dachte, es sei der leichtere Weg, aber die einzigen Dinge, die ich gefunden habe, kosten viel Code, haben Sie eine andere Idee die URL löschen?
  4. Gibt es eine andere Django-Methode, die Ihnen dabei hilft, dieses Problem zu lösen oder dieses Problem einfach zu vermeiden?
+0

Was ist Ihr '

Selcuk

+0

Ich füge es der Frage hinzu. – ivoruJavaBoy

+0

Wie ich Ihnen schon gesagt habe, 'rendern' nicht - und kann und sollte nicht die URL ändern, auf der Sie sich befinden. Das ist einfach nicht das, was es tut. Es dient zur Anzeige der Vorlage * der von Ihnen angeforderten Seite *. –

Antwort

1

Das Problem ist, dass Sie nicht ein action="" in Ihrem form Tag haben was einfach bedeutet, dass Sie die vorhandenen URL zu stellen, einschließlich aller Abfragezeichenfolgeflag (dh. Bestehenden GET Parameter).

Fügen Sie einfach action="" zum form Tag, wie zum Beispiel:

<form method="POST" action="{% url 'insertForm' %}"> 
+0

So funktioniert das "" es gibt zurück: Reverse für 'insertForm' mit Argumenten '()' und Schlüsselwortargumente '{}' nicht gefunden. 0 Muster (s) versucht: [] Ich schaue mir das jetzt an .. – ivoruJavaBoy

+0

@ivoruJavaBoy Dann hast du ein Problem mit deinem 'urls.py', da es dort ohne Argumente klar definiert ist. Es ist immer besser, das Vorlagen-Tag 'url' zu verwenden. Sie können jedoch einfach "action ="/SSO_Management_POC/userfilt/"' zu Testzwecken verwenden. – Selcuk

+0

Übrigens habe ich auch die urls.py zur Frage hinzugefügt ... es scheint mir so einfach zu sein! – ivoruJavaBoy