Джанго универсальный FormView не отображается при включении в другой шаблон - PullRequest
0 голосов
/ 26 июня 2018

Первое, что сейчас работает:

У меня есть форма, определенная в forms.py:

class EnrollForm(forms.Form):
    course_id = forms.IntegerField(required=True)

    def enroll(self):
        print(self.cleaned_data)

Я создаю указанную форму в виде в views.py:

class EnrollView(FormView):
    template_name = 'core/enroll.html'
    form_class = EnrollForm
    success_url=''

    def form_valid(self, form):
        form.enroll()
        return super().form_valid(form)

Я отображаю это в enroll.html:

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

Итак, когда я посещаю localhost:8000/core/enroll/, я вижу форму во всей ее силе: working form

Однако, когда я пытаюсь включить этот файл в другой файл, используя

{% include "core/enroll.html" %}

в другом html-файле, который отображает только кнопку, в то время как тег {{ form }} в enroll.html ни к чему не приводит и просто молча завершается ошибкой, показывая:

dysfunctional form

EDIT1: это файл, из которого я пытаюсь включить форму:

<h1>{{ course.title }}</h1>

{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}

<ul>
{# reverse lookup on codes with course foreignkey relationship #}
{% for code in course.code_set.all %}
  <li>{{ code.code }}</li>
{% endfor %}
</ul>

{% include "core/enroll.html" %}

1 Ответ

0 голосов
/ 26 июня 2018

Так вот в чем дело. Когда вы посещаете localhost: 8000 / core / enroll / , django вызывает представление EnrollView , где вы определяете, что такое форма, и передаете ее в контекст.

однажды в контексте, его HTML-страница, enroll.html , в этом случае знает, что такое переменная формы.

с другой стороны, когда вы посещаете другую страницу, EnrollView никогда не вызывается. включенный частичный {% include "core / enroll.html"%} пытается отобразить форму, но не знает, что такое переменная формы.

решение:

Представление, отображающее HTML-страницу, о которой идет речь (где вы хотите видеть форму, но не можете), должно добавить EnrollForm в контексте.

context['form'] = EnrollForm()

что-то вроде строки выше. Тогда вы сможете увидеть форму.

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