我创建了一个视图+表单,该表单创建了两个小部件以及一个用户按钮。一个选择一个选项,另一个选择输入内容。现在,我想在单击按钮后将用户重定向到另一个显示其输入的网页。 (通常,我想知道如何访问用户输入并进一步使用它。)
这是我的表格:
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”的信息,但是我不确定确切地将其放置在何处以及如何放置。
答案 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})