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:

  1. Einen user zu Besuch : website.com/getname/, um zu zeigen, das name.html die Datei (das tut es)

  2. 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.

  3. 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

Schreibe einen Kommentar