python - Django 模板中的 `form.as_p` 从哪里来?

标签 python django forms django-templates

我有一个通用 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 ,它将取代 <&lt; ; >&gt;等等。当然,除非你把它包裹在 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/

相关文章:

python:如何将if语句转换为枚举或使其成为pythonic

python - Kivy 如何从 kivy 中的字典创建小部件

python - 自定义 django-revproxy 权限

django - 是否需要 sqlparse?如果需要,如何安装?

python - OpenCV 的 HoughLines 以什么顺序列出 [rho,theta] 矩阵中检测到的线?

python - 如何使用 Django/Python 从 RESTful Web 服务中使用 XML?

python - Django:生产环境的编码问题

php - undefined variable 错误(对于占位符)显示在 html 文件中,即使它是在 php 文件中定义的

java - Java 中的 Http POST(带文件上传)

css - 使用 CSS 将输入值旋转 90 度