Как визуализировать форму в представлении на основе классов? - PullRequest
1 голос
/ 07 марта 2020

У меня есть индексная страница:

views.py

class IndexView(TemplateView):
    template_name = "index.html"

urls.py

urlpatterns = [
    path('', IndexView.as_view()),
]

И мне нужно визуализировать форму на этой странице

index. html

{% block content %}
    <!-- Other blocks -->
    <div id="input">
        <form method="POST" class="text-form">
            {% csrf_token %}
            {{ form.as_p }}
            <button type="submit" class="submit btn">Submit</button>
        </form>
    </div>
    <!-- Other blocks -->
{% endblock %}

forms.py

class TextForm(forms.Form):
    text = forms.CharField(widget=forms.Textarea)

Существует топи c об обработке форм представлений на основе классов , но мне не ясно, как визуализировать HTML с помощью этой формы

1 Ответ

2 голосов
/ 07 марта 2020

Прямо сейчас вы не передаете форму контексту. Вы можете использовать FormView [Django -doc] или другие представления, использующие такую ​​форму, как CreateView [ Django -doc] , UpdateView [Django -doc] , et c.

Таким образом, вы можете определить FormView и установите атрибут form_class [Django -doc] для класса, который вы будете sh отображать:

# app/views.py

from app.forms import <b>TextForm</b>
from django.views.generic.edit import <b>FormView</b>

class IndexView(<b>FormView</b>):
    template_name = 'index.html'
    <b>form_class = TextForm</b>

@ PavelAntspovich : если он составляет post, он автоматически создаст форму и передаст ей request.POST и request.FILES, а также проверит, является ли она действительной. Если это так, он вызовет метод form_valid [Django -doc] с формой в качестве параметра. Если нет, он вызовет метод form_invalid [Django -doc] . Эти методы должны возвращать HttpResponse (то есть результат представления).

...