Django,表单未在模板中呈现

时间:2019-10-08 15:03:06

标签: django django-forms django-templates django-views

表单未在模板中呈现。

此视图没有模型,我知道,这是哈希序列号的快速工具。结果,我使用的是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>

我已经按照文档进行了深入了解,但是我肯定已经复制了错误的内容,因此在Google上找不到任何内容,因此我怀疑在这种极为罕见的情况下,这是第一次发生这种情况。

1 个答案:

答案 0 :(得分: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)
相关问题