Django,表单未在模板中呈现

Posted

技术标签:

【中文标题】Django,表单未在模板中呈现【英文标题】:Django, form not rendering in the template 【发布时间】:2020-02-05 21:39:52 【问题描述】:

表单未在模板中呈现。

这个视图没有模型,我知道,这是一个散列序列号的快速工具。因此,我使用的是 form.Forms,而不是 ModelForms。因此,与其经历从头开始创建表单的繁琐工作,而且当我将其添加到我当前的站点时,使用表单是有意义的,但我无法让它呈现,它真的很简单,有两个字段和一个提交按钮。由于某种原因,表单字段没有显示,但提交按钮是。

表格

class VoiceSearchForm(forms.Form):
    hw_number = forms.CharField(max_length=6)
    ca_serial = forms.CharField(max_length=16)

查看

def voice_search_view(request):
    form = VoiceSearchForm(request.POST)
    if request.method == 'POST':
        form = VoiceSearchForm()
        if form.is_valid():
            hw_number = form.cleaned_data['hw_number']
            ca_serial = form.cleaned_data['ca_serial']

        # Do stuff with the data collected. 

    return render(request, 'voice_search.html', )

模板

<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Voice Search</title>
  </head>
  <body>
    <h1>Hashing tool</h1>

    <form action="." class="voice_search"method="POST">
       form.as_p 
      % csrf_token %
      <input type="submit" class="btn" value="Submit">
    </form>
  </body>
</html>

我已经按照文档走了这么远,但我一定是复制了错误的东西,并且在谷歌上找不到任何东西,所以我怀疑在这个极其罕见的情况下,这是第一次发生这种情况。

【问题讨论】:

【参考方案1】:

您需要将表单作为上下文传递以在模板中使用它。 在你看来改变这个:

    return render(request, 'voice_search.html', )

到这里:

    return render(request, 'voice_search.html', 'form': form)

您可能还考虑使用名为form view 的基于类的通用视图。

在您的情况下,它看起来像(未经测试):

from django.views.generic.edit import FormView

class VoiceSearchView(FormView):
    template_name = 'voice_search.html'
    form_class = VoiceSearchForm

    def form_valid(self, form):
        hw_number = form.cleaned_data['hw_number']
        ca_serial = form.cleaned_data['ca_serial']
        return super().form_valid(form)

【讨论】:

谢谢,准时! 是的,谢谢,确实如此,我现在只需要弄清楚如何将我的回复回复给用户。

以上是关于Django,表单未在模板中呈现的主要内容,如果未能解决你的问题,请参考以下文章

Django 联系电子邮件表单未在模板 home.html 中呈现/显示

Django - 不使用表单或模型表单时在模板中呈现模型选择

Django:在模板中呈现表单字段时添加 CSS 类

Django为表单中的两个提交按钮呈现不同的模板

将 Django 表单传递给模板标签

如何在 Django 中修改 Bootstrap 4 表单验证信息呈现方式?