django - Django模板中'form.as_p'中的值'form'从何而来?
问题描述
我知道之前有人问过这个问题,但接受的答案并没有真正回答这个问题: django 模板中的 `form.as_p` 来自哪里?
在 Django 文档中:
示例 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>
问题是,模板从哪里获取“表单”上下文,因为我们没有在 AuthorCreate 类中明确定义 render() 函数?谢谢。
解决方案
我找到了答案。
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())
反过来,如果 key 中不存在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
.
推荐阅读
- excel - 活动单元格和选定单元格之间的差异
- c++ - 无法执行内部函数 strlen
- r - 如何用ggplot2中的另一个变量填充分组/躲避的条形?
- javascript - PnP JS 添加具有 FieldGeolocationValue 的项目 - SharePoint
- javascript - 使用 JavaScript 将两个数组的所有可能组合作为数组数组获取
- php - 友好 URL 保留在 URL 的旧部分中
- ruby-on-rails - 我正在尝试基于 USER_ID 更新模型,但它使用 ID
- reactjs - Material UI:如何在头像中使用我自己的图像
- c# - 具有多个参数的 HttpClient.DeleteAsync
- java - 为什么我的 Java 程序对于某些值会陷入无限循环?