按钮充当“提交”和“href”

时间:2015-07-24 13:26:55

标签: html django html5 button tags

我创建了一个表单,然后我想创建一个同时充当“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)

如果有人可以帮助我,我真的很感激。 谢谢。

3 个答案:

答案 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/

希望这有帮助!