python - django 模板中的“form.as_p”从何而来?
问题描述
我有一个通用视图和一个表单模板。
我的看法是:
class BlogCreateView(CreateView):
model = Post
template_name = "post_new.html"
fields = "__all__"
我的表单模板是:
{% extends "base.html" %}
{% block content %}
<h1>New Post</h1>
<form action="" method="POST">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save" />
</form>
{% endblock content %}
现在我的问题是关于form.as_p或特别是form。
那个是从哪里来的?
请帮帮我。多谢
解决方案
.as_p()
[Django-doc]是Form
. 它生成一个SafeText
对象 [Django-doc],其中包含要包含在模板中的 HTML 代码。
它很重要的事实SafeText
,因为 Django 渲染引擎否则会“转义”它:不使用SafeText
,它将替换<
为<
; >
with>
等。当然,除非您自己将其包装在一个SafeText
对象中,例如通过|safe
模板过滤器 [Django-doc]。
例如,我们可以在文档中定义一个表单:
class OptionalPersonForm(forms.Form): first_name = forms.CharField() last_name = forms.CharField() nick_name = forms.CharField(required=False)
如果我们然后构造一个表单对象,我们可以调用该.as_p()
方法:
>>> OptionalPersonForm().as_p()
'<p><label for="id_first_name">First name:</label> <input type="text" name="first_name" required id="id_first_name"></p>\n<p><label for="id_last_name">Last name:</label> <input type="text" name="last_name" required id="id_last_name"></p>\n<p><label for="id_nick_name">Nick name:</label> <input type="text" name="nick_name" id="id_nick_name"></p>'
>>> type(OptionalPersonForm().as_p())
<class 'django.utils.safestring.SafeText'>
Django 表单具有三种流行的呈现方法:.as_p
、.as_table()
[Django-doc]和.as_ul()
[Django-doc]。不同之处在于它们呈现 HTML 的方式略有不同:作为段落、表格或无序列的 HTML 列表。
推荐阅读
- c# - 使用 .NET Core 在 Linux 中通过“/bin/bash”执行 .sh(bash 脚本)文件
- python - 如何访问它的对象查询属性我知道它有 5 个属性
- r - 使用回滚和 lubridate 获取 NA 值
- reporting-services - 如果状态存在,尝试显示表达式,得到#Error
- jquery - jQuery 如果选择了下拉菜单
- c# - 如何在 Xamarin iOS 中将本地钥匙串同步到设备和 iCloud
- css - 在透明标题上使用 (-webkit-)backdrop-filter
- docker - 从谷歌应用引擎SSH执行`docker exec`时终端挂起
- firebase - Firebase 上的朋友之友
- bash - 如何在另一个变量中分配变量的值