Django, форма не отображается в шаблоне - PullRequest
0 голосов
/ 08 октября 2019

Форма не отображается в шаблоне.

Нет модели для этого представления, и я знаю, что это быстрый инструмент для хеширования серийного номера. В результате я использую формы. Forms, а не ModelForms. Таким образом, вместо того, чтобы пройти через процедуру создания формы с нуля, и когда я добавляю ее на свой текущий сайт, использование формы имеет смысл, но я не могу заставить ее визуализироваться, это действительно просто с двумя полями икнопка отправки. По какой-то причине поля формы не отображаются, но кнопка отправки имеет вид.

Форма

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

view

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', {})

template

<!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 Ответ

1 голос
/ 08 октября 2019

Вам необходимо передать форму в качестве контекста, чтобы использовать ее в своем шаблоне. По вашему мнению, измените это:

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

на это:

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

Вы также можете подумать об использовании универсального представления на основе классов под названием представление формы .

В вашем случае это будет выглядеть (не проверено):

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...