DJANGO - Redirect auf andere Seite von der POST mit Daten
Ich versuche, eine einfache form, die, sobald gefüllt, wird direkt zu einer anderen Webseite oder bleiben auf der gleichen Seite, wenn es ungültig ist. Die Seite soll ein Textfeld und senden Sie das Formular und sobald ein Nutzer auf alles, was Sie sollte Sie auf einer separaten Seite.
Meine Verzeichnisstruktur ist wie folgt:
appName/
app/
forms.py
urls.py
views.py
templates/
app/
goodbye.html
name.html
library.html
thanks.html
appName/
settings.py
urls.py
Meine app/urls.py ist wie folgt:
from django.conf.urls import url
from . import views
app_name = 'app'
urlpatterns = [
url(r'^$', views.index2, name = 'index'),
url(r'^hello/$', views.hello, name = 'hello'),
url(r'^goodbye/$', views.goodbye, name = 'goodbye'),
#url(r'^library$', views.library, name = 'library'),
url(r'^library/$', views.library, name = 'library'),
url(r'^library/(?P<book_id>[0-9]+)/$', views.book, name = 'book'),
url(r'^getname/$', views.get_name, name = 'get_name'),
url(r'^your-name/$',views.get_name, name='get_name'),
url(r'^thanks/$',views.say_thanks,name='thanks'),
#url(r'^thanks/(?P<name_id>[a-zA-Z]+)/$', views.say_thanks,name='thanks'),
]
Meine forms.py ist :
from django import-Formulare
class NameForm(forms.Form):
your_name = forms.CharField(label = 'Your name', max_length=100)
Meine app/views.py ist:
from django.http import HttpResponse
from django.template import loader
from django.shortcuts import render
from django.http import HttpResponseRedirect
#forms
from .forms import NameForm
# Create your views here.
def index2(request):
return HttpResponse("hello world")
def hello(request):
text = """<h1>Welcome to my app! </h1>"""
return HttpResponse(text)
def goodbye(request):
template = loader.get_template("app/goodbye.html")
context = {
'output' : 'This is output from goodby views.py request handler'
}
return HttpResponse(template.render(context,request))
def library(request):
template = loader.get_template("app/library.html")
context = {
'output' : 'Welcome to the libary!!'
}
return HttpResponse(template.render(context, request))
def book(request, book_id):
return HttpResponse("You're looking at book %s. " % book_id)
def get_name(request):
# if this is a POST request we need to process the form data
if request.method == 'POST':
# create a form instance and populate it with data from the request:
form = NameForm(request.POST)
# check whether it's valid:
if form.is_valid():
#process the data in form.cleaned_data as required
locationGo = "/thanks/"
template = loader.get_template("app/thanks.html")
return HttpResponse(template.render({'name':'name'},request))
else:
form = NameForm()
template = loader.get_template("app/name.html")
context = {'form': form}
return HttpResponse(template.render(context, request))
def say_thanks(request):
template = loader.get_template("app/thanks.html")
return HttpResponse(template.render({'name': 'name'},request))
Meine Vorlagen enthalten:
name.html :
<form action = "/getname/" method = "post">
{% csrf_token %}
{{ form }}
<input type = "submit" value = "Submit" />
</form>
goodbye.html
<h1>Goodbye to Template Romance</h1>
<a href="{% url 'app:index' %}">Go Back</a>
thanks.html
Thanks {{name}}!
Was würde ich wie ist für:
-
Einen user zu Besuch : website.com/getname/, um zu zeigen, das name.html die Datei (das tut es)
-
Wenn ein Benutzer hat senden, bleiben Sie auf der gleichen Seite (website.com/getname/) (was es nicht ist - es gibt: ValueError at /getname/->Das view-app.Blick.get_name kamen nicht wieder ein HttpResponse-Objekt. Es kehrte Keine statt.
-
Wenn ein Benutzer in das submit-Feld umgeleitet werden website.com/thanks/(was es irgendwie nicht. Es lädt derzeit die thanks.html Vorlage, aber die URL bleibt website.com/getname/)
Innerhalb der get_name(Anfrage): Funktion, die POST und GET if...else scheint nicht zu brennen, basierend auf den Absenden-button, und es scheint nicht geladen zu werden, die richtige Seite, ODER ändern Sie die aktuelle URL-Adresse einmal wird es verarbeitet. Ich habe versucht mit HttpRedirect (), die funktioniert, allerdings würde ich auch gerne übergeben der Formulardaten (das ist ein anderes Thema).
Anregungen wäre eine große Hilfe!
InformationsquelleAutor Jeeves | 2016-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre erste problem ist, dass Sie nicht wieder eine Antwort, wenn die request-Methode ist post und das Formular ist ungültig. Sie können das Problem beheben, dass durch die änderung der Einrückung Ihrer Sicht, so dass Sie immer eine Antwort zurück an das Ende der Ansicht.
Wenn Sie umgeleitet werden sollen, die
/thanks/
anzeigen, dann kann man das umleiten Verknüpfung.Beachten Sie, dass es nicht möglich ist, umleiten und übergeben Sie die Daten in das Formular (siehe diese Frage für eine Erklärung). Sie sollten jede Bearbeitung, die Sie wollen mit den Daten vor umleiten. Sie konnte die Nachrichten-framework um eine Nachricht zu erstellen
'Thanks <name>'
vor der Umleitung.Diese funktioniert, weil Sie haben
name='thanks'
in Ihre url-Muster.Können Sie vereinfachen Ihre Ansichten mit den
render
Verknüpfung. Stattkönnen Sie einfach tun:
Vergessen Sie nicht, die Einfuhren für die Verknüpfungen:
InformationsquelleAutor Alasdair