在其他网址上输出用户输入的视图

时间:2019-04-27 18:19:53

标签: django django-views

我创建了一个视图+表单,该表单创建了两个小部件以及一个用户按钮。一个选择一个选项,另一个选择输入内容。现在,我想在单击按钮后将用户重定向到另一个显示其输入的网页。 (通常,我想知道如何访问用户输入并进一步使用它。)

这是我的表格:

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,该URL将触发方法“ answerrequestseite”。现在如何将用户输入(eingabefeld和flughafenname)传递到另一个方法中,该方法将呈现第二个URL的模板?

我阅读了很多有关使用“ request.GET”的信息,但是我不确定确切地将其放置在何处以及如何放置。

1 个答案:

答案 0 :(得分:1)

if eingabe.is_valid():之后,创建一些包含所需值的变量。 然后在重定向中,您需要传递这些值作为get参数,例如: your_url /?id = 123

然后,您可以通过以下方式在views.py中检索变量     request.GET.get('id')

但是在您的情况下,您不想传递简单的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})