【问题标题】:Crispy form: render a field as HTMLCrispy 表单:将字段呈现为 HTML
【发布时间】:2021-11-16 21:28:30
【问题描述】:

我有一个包含各种字段的表单,其中一些应该是只读的,但我不想使用“只读”字段,而是将它们作为 HTML 进行渲染。

我想要的例子:

<p>{{form.text.value}}</p> 被使用。以便将其呈现为纯 html 而不是输入。

HTML 标记可用作模板,但我不知道如何(以及是否)可以使用它。

假设我的字段名为text,我应该用什么来渲染它?

HTML("This is the text {{text}}")这不起作用:(

或者我应该为新字段创建一个新模板,以便按照我的需要呈现它?

【问题讨论】:

    标签: django django-forms django-crispy-forms


    【解决方案1】:

    我之前没有使用过crispy form,但我会尽力帮助你。在常规表单中,您可以在相关表单字段中使用disabled=True。它会自动向模板添加只读功能和额外的验证以避免更改字段。

    根据docs

    disabled 布尔参数,当设置为 True 时,使用 disabled HTML 属性禁用表单字段,这样用户就无法编辑它。即使用户篡改了提交给服务器的字段值,它也会被忽略,取而代之的是表单初始数据中的值。

    所以它对你的表单来说会更安全。

    一个例子:

    class ExampleForm(forms.Form):
        readonly_field = forms.CharField(disabled = True)
    

    然后在你的 HTML 模板中:

    <form method = "POST">
        {% csrf_token %}
        {{ form }}
        <input type = "submit" value = "Submit">
    </form>
    

    我想你可以通过添加额外的crispy-form 模板标签来处理。

    【讨论】:

    • 谢谢,但这是不同的。我想将文本呈现为 HTML 中的文本,而不是作为没有编辑可能性的输入
    • disabled=True 也是这样做的。用户可以看到数据字段,但不能对其进行编辑。所以它具有只读功能。如果这是您想要的,您可以通过编辑问题来澄清您的观点吗?
    • 我想将它们呈现为纯HTML,就像将它们放在&lt;p&gt;中一样
    • 你能检查一下这个link吗?
    • 您可以使用{{ form.name_of_field }}进行更改。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 2019-10-19
    • 2017-10-14
    • 2015-09-20
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    相关资源
    最近更新 更多