【问题标题】:how to send a form to html in django如何在django中将表单发送到html
【发布时间】:2019-05-15 08:46:42
【问题描述】:

我正在尝试使用 django 将表单发送到 html。这是表格

from django import forms

class contactForm(forms.Form):
name = forms.CharField(required=False, max_length=100,help_text='100 characters max.')
email = forms.EmailField(required=True)
comment = forms.CharField(required=True, widget=forms.Textarea)

视图文件是

from django.shortcuts import render

from .forms import contactForm
# Create your views here.
 def contact(request):
   form = contactForm(request.POST or None)

   if form.is_valid():
    print (request.POST)
    context = locals()
    template = 'contact.html'
    return render(request, template, context)

正确命名的html文件是,

  {% extends 'base.html' %}

  {% block content %}
  <h1> Contact </h1>

   <form method='POST' action=''> {% csrf_token %}
    {{ form.as_p }}
    <input type='submit' value='submit form' class='btn btn-default'  />
   </form>
   {% endblock %}

当您访问页面时,唯一显示的是 h1 标签,我该如何解决这个问题?

【问题讨论】:

  • 你还需要渲染表单对象
  • 在哪里?以及如何?
  • 您总是在尝试验证表单,即使它不是 POST 请求。

标签: python html django forms post


【解决方案1】:

你可以试试

def contact(request):
   form = contactForm(request.POST or None)

   if form.is_valid():
      print (request.POST)
      context = locals()
      template = 'contact.html'
      return render(request, template, context)

   return render(request, 'contact.html', {'form': form})

【讨论】:

  • 您在 /contact/ 尝试 ValueError 时收到此错误视图 contact.views.contact 未返回 HttpResponse 对象。它返回 None 。
  • 你需要在代码中的 if 条件之外返回你没有返回任何东西。
  • 我已经更新了我的代码。您需要在 if 条件之外返回渲染。当您提交表单时,只有当条件有效并输入时,否则它不会输入。您的“返回渲染...”在问题所在的 if 条件内
  • 收到此错误文件“C:\Users\14153\Desktop\Tradify.com\Tradifycom\contact\views.py”,第 13 行返回渲染(请求、模板、上下文)^ SyntaxError: '返回'外部函数
  • 在 if 之外的函数内返回它。可能是您的 return 语句现在在函数之外
【解决方案2】:

渲染 from 的正确格式是这样的:

from django.shortcuts import reverse
from django.http import HttpResponseRedirect
from . import models
from . import forms

def contact(request):

    if request.POST == 'POST':

        form = forms.contactForm(request.POST or None)
        contact_model = models.contactModel() #err is here name it with appropriate model name contactModel is just an example

        if form.is_valid():
            contact_model.name = form.cleaned_data['name']
            contact_model.email = form.cleaned_data['email']
            contact_model.comment = form.cleaned_data['comment']
            contact_model.save()
            return HttpResponseRedirect('/success/')) #desired url to redirect, you can use reverse to call templates according to url names

    else: #if request is GET
        form = forms.contactForm()

     context = {
        'form': form
     }

     template = 'contact.html'
    return render(request, template, context=context)

不要在您的模板中使用操作,只需将您的 urls.py 设置为重定向到所需的视图。

【讨论】:

  • 表示没有定义contactForm。
  • 因为它只是一个简单的模型名称。您应该将其更改为所需的。我更新了代码以使其更清晰。
猜你喜欢
  • 2014-11-02
  • 2019-09-14
  • 2019-09-01
  • 2021-12-24
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多