посмотреть, что выводит пользовательский ввод по другому URL - PullRequest
1 голос
/ 27 апреля 2019

я создал вид + форму, которая создает два виджета + кнопку для пользователя. Один для выбора, другой - для ввода чего-либо. Теперь я хочу перенаправить пользователя после нажатия кнопки на другую веб-страницу, отображающую его ввод. (Как правило, я хочу знать, как получить доступ к userinput и в дальнейшем использовать его).

Это моя форма:

class Eingabefeld(forms.Form):
    eingabefeld = forms.CharField(label="Flight Number",max_length=20)
    a = Auswahlmoeglichkeiten.objects.all()
    flughafenname = forms.ModelChoiceField(label="Target Airport",queryset=a,empty_label="-------")
    source = forms.CharField(       
    max_length=50,             
    widget=forms.HiddenInput(),
    required=False
)

Это мои views.py:

def get_eingabe(request):
    log = logging.getLogger(__name__)
    if request.method =="POST":
        eingabe = Eingabefeld(request.POST)
        log.warn(eingabe)
        if eingabe.is_valid():
            return HttpResponseRedirect("answerrequest")
    else:
        eingabe = Eingabefeld()
    return render(request, "app_one/labels.html", {"eingabe": eingabe})

def answerrequestseite(request):
    return render(request, "app_one/answerrequest.html")

и это мой html (включенный html в этот предназначен только для макета):

<head>
    <title>Home</title>
</head>
<form method="post" novalidate>
    {% csrf_token %}
    {% include "app_one/bootstrap_layout2.html" with form=eingabe %}
    <div class="row">
        <div class="col-sm-5"></div>
        <div class="col-sm-2">
            <button type="submit" class="btn btn-primary btn-block">Let's Go!</button>
        </div>
        <div class="col-sm-5"></div>
    </div>
</form>

Таким образом, при открытии моей веб-страницы вызывается «get_eingabe», и шаблон обрабатывается, теперь при нажатии кнопки вход проверяется и после успешной проверки открывается другой URL-адрес, который вызывает метод «answerrequestseite». Теперь, как мне передать userinput (eingabefeld и flughafenname) в другой метод, который будет отображать шаблон для второго URL?

Я много читал об использовании "request.GET", но я не совсем уверен, где именно его разместить и как.

1 Ответ

1 голос
/ 28 апреля 2019

После if eingabe.is_valid(): создайте некоторую переменную, содержащую нужные значения.затем при перенаправлении вам нужно передать эти значения в качестве аргумента get, например: your_url /? id = 123

Затем вы можете получить свою переменную в файле views.py через request.GET.get ('id')

Но в вашем случае вы не хотите передавать простой идентификатор, вы хотите передать user_input.Одним из способов будет очистка этого ввода, чтобы сделать его совместимым с URL.

В противном случае более гибким решением будет сохранение значений в сеансе.

Сеанс (через cookie)

# views.py
# Set the session variable
request.session['you_variable_name_here'] = 'the value'

# Retrieve the session variable
var = request.session.get['you_variable_name_here']

https://docs.djangoproject.com/en/2.2/topics/http/sessions/

Для вашего примера в первом представлении:

if eingabe.is_valid():
    eingabefeld = eingabe.cleaned_data.get('eingabefeld')
    flughafenname = eingabe.cleaned_data.get('flughafenname')
    request.session['eingabefeld'] = eingabefeld
    request.session['flughafenname'] = flughafenname.pk
    return HttpResponseRedirect("answerrequest")

Во втором представлении:

def answerrequestseite(request):
    eingabefeld = request.session.get('eingabefeld')
    flughafenname_pk = request.session.get('flughafenname')
    flughafenname = YourFlughafennameModel.objects.get(pk=flughafenname_pk)
    return render(request, "app_one/answerrequest.html",{'eingabefeld':eingabefeld,'flughafenname':flughafenname})
...