当包含在其他模板中时,Django 通用 FormView 不显示
Posted
技术标签:
【中文标题】当包含在其他模板中时,Django 通用 FormView 不显示【英文标题】:Django generic FormView not showing when included in other template 【发布时间】:2018-12-05 14:40:21 【问题描述】:首先,目前的工作是什么:
我在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/
时,我看到了这个表单的全部力量:
但是,当我尝试使用
将此文件包含在另一个文件中时% include "core/enroll.html" %
在另一个 html 文件中,仅显示按钮,而 enroll.html
中的 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" %
【问题讨论】:
模板的CCS是否支持嵌套模板?在您的页面上尝试检查元素以查看存在哪些 HTML 对象。对象可能存在于页面范围(容器)之外,因此不可见。 @t0bi 我已经检查过了,但忘记将其添加到帖子中。令牌和提交按钮之间的页面上没有代码。 奇怪。如果您发布更多您正在使用的其他模板,这可能会有所帮助。 用代码@t0bi编辑 【参考方案1】:所以事情就是这样。当您访问 localhost:8000/core/enroll/ 时,django 会调用视图 EnrollView,您可以在其中定义表单是什么并将其传递给上下文。
在上下文中,它的 html 页面 enroll.html 在这种情况下知道什么是表单变量。
另一方面,当您访问另一个页面时,永远不会调用 EnrollView。包含的部分% include "core/enroll.html" %,尝试渲染表单但不知道表单变量是什么。
解决方案:
呈现相关 html 页面的视图(您想查看表单但不能查看的位置)应在上下文中添加 EnrollForm。
context['form'] = EnrollForm()
类似于上面的行。然后你应该可以看到表格了。
【讨论】:
这看起来不错,但不幸的是,当我创建上下文并添加“表单”条目时,错误仍然存在。有什么想法吗? 新页面是否有多个表单? 不,只有一个以上是关于当包含在其他模板中时,Django 通用 FormView 不显示的主要内容,如果未能解决你的问题,请参考以下文章