我有一个通用 View 和一个表单模板。
我的看法是:
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
object [Django-doc]包含要包含在模板中的 HTML 代码。
事实是 SafeText
很重要,因为 Django 渲染引擎否则会“转义”它:不使用 SafeText
,它将取代 <
与 <
; >
与 >
等等。当然,除非你把它包裹在 SafeText
中。反对自己,例如通过 |safe
template filter [Django-doc] .
例如,我们可以定义一个表单 like in the documentation :
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 列表。
关于python - Django 模板中的 `form.as_p` 从哪里来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57444339/