我创建了一个表单,然后我想创建一个同时充当“submit”和“href”的按钮。这意味着当我点击按钮时,它将提交表单并重定向到另一个页面。
当前页面:“http://127.0.0.1:8000/” 提交后重定向页面:“http://127.0.0.1:8000/polls/”
我尝试在表单上添加一个操作链接(代码如下),但它不起作用。它只是重定向到链接而不提交任何东西。
<form method='POST' action='http://127.0.0.1:8000/polls/' >{% csrf_token %}
<p>Questionnaire</P>
{{form.as_p}}
<input type="submit" value="Submit & Next Page"/>
</form>
我的views.py:
from django.shortcuts import render
from .forms import SurveyForm
def homepage(request):
title = "Questionnaire"
form = SurveyForm(request.POST or None)
if form.is_valid():
instance = form.save(commit=False)
instance.save()
context = {
"title": title,
"form": form,
}
return render(request, "homepage.html", context)
如果有人可以帮助我,我真的很感激。 谢谢。
答案 0 :(得分:2)
&#34;正常&#34;方法是将表单发布到您的视图(这使用action
链接),并在此视图函数中,当表单完全正确时,您重定向到另一个URL。
您通常拥有以下代码:
if request.method == "POST":
form = YourForm(request.POST)
if form.is_valid():
# do stuff
return HttpResponseRedirect(reverse(poll_url))
else:
form = YourForm(request.POST)
return render(request, <html file>, {'form': form})
答案 1 :(得分:1)
您无法从一个按钮/链接执行两个操作。你有两个解决方案:
1 \重定向:
将表单设置为POST
上的http://127.0.0.1/
。在服务器端,您处理表单并发送一个http 301 response (Redirect)。
2 \发送至/民意调查
在表单上保留所有内容。但是在服务器端,将您从处理移动到将呈现页面的相同方法。 这样,您的方法会隐藏表单,然后显示下一页。
答案 2 :(得分:1)
你可以做两种方法(首先是首选):
首先 - 在您的观看中,您应该有类似的内容:
def view(request):
if request.method == 'POST':
form = SomeForm(request.POST)
if form.is_valid():
# Do something
# Add the line below to redirect to the name of a url
# after completion of the form
return HttpResponseRedirect(reverse('polls'))
秒 - 您可以尝试将onclick="window.location='http://127.0.0.1:8000/polls/'"
添加到按钮中。这应该将它重定向到新窗口。例如:
<form method='POST' onclick="window.location='http://127.0.0.1:8000/polls/'">{% csrf_token %}
<p>Questionnaire</P>
{{form.as_p}}
<input type="submit" value="Submit & Next Page"/>
</form>
注意:如果您选择第二种方法(可能不应该),那么对网址使用Django模板是明智的(即{%url'轮询'%}而不是http://127.0.0.1:8000/polls/)
希望这有帮助!