Откуда берется значение «form» в «form.as_p» в шаблоне Django? - PullRequest
1 голос
/ 11 апреля 2020

Я знаю, что этот вопрос задавался ранее, но принятый ответ на самом деле не отвечает на вопрос: откуда взялись шаблоны `form.as_p`in django?

In Django do c:

Пример myapp / views.py:

from django.views.generic.edit import CreateView
from myapp.models import Author

class AuthorCreate(CreateView):
    model = Author
    fields = ['name']

Пример myapp / author_form. html:

<form method="post">{% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Save">
</form>

Вопрос откуда шаблон получает контекст формы, поскольку мы явно не определяли функцию render () внутри класса AuthorCreate? Спасибо.

1 Ответ

0 голосов
/ 11 апреля 2020

Я нашел ответ.

CreateView наследует метод get от класса ProcessFormView и метод get_context_data от класса FormMixin.

Как вы можете см. в коде, метод get возвращает выражение, которое вызывает get_context_data.

class ProcessFormView(View):
    """Render a form on GET and processes it on POST."""
    def get(self, request, *args, **kwargs):
        """Handle GET requests: instantiate a blank version of the form."""
        return self.render_to_response(self.get_context_data())

. В свою очередь, get_context_data добавляет ключевой аргумент с ключом form, если он еще не присутствует в **kwargs:

class FormMixin(ContextMixin):
...
    def get_context_data(self, **kwargs):
        """Insert the form into the context dict."""
        if 'form' not in kwargs:
            kwargs['form'] = self.get_form()
        return super().get_context_data(**kwargs)

Итак, CreateView отображает Ответ с контекстом, который имеет ключ формы и значение, указывающее на ModelForm.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...