31

我试图在我的 Django 表单中为选择字段生成帮助文本

i_agree = forms.CharField(label="", help_text="Initial to affirm that you agree to the <a href='/contract.pdf'>contract</a>.", required=True, max_length="4")

但是,原始 HTML 在帮助文本中呈现为输出。如何将 HTML 输入到 Django 表单字段的帮助文本中?

4

4 回答 4

59

您可以mark_safe在模型中使用来指示 html 是安全的,它应该被解释为:

from django.utils.safestring import mark_safe

i_agree = forms.CharField(label="", help_text=mark_safe("Initial to affirm that you agree to the <a href='/contract.pdf'>contract</a>."), required=True, max_length="4")
于 2012-05-22T16:45:55.957 回答
13

如果您自己遍历表单,您也可以在模板中将其标记为安全:

{% for f in form %}
    {{f.label}}{{f}}{{f.help_text|safe}}    
{%endfor%}

这是在模板中这样做的一个非常简单的示例。你需要做更多的事情才能让它看起来不错。

于 2012-05-22T17:31:04.720 回答
3

您可以使用外部文件来提高可维护性和关注点分离:

  1. 修改表单的__init__()方法;
  2. 之后super(MyForm, self).__init__(*args, **kwargs);
  3. 将结果分配render_to_string()self.fields['my_field'].help_text

表格.py

从 django.template.loader 导入 render_to_string

class MyForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super(MyForm, self).__init__(*args, **kwargs)
        # Only in case we build the form from an instance,
        if 'instance' in kwargs and kwargs['instance'].nature == consts.RiskNature.RPS:
            self.fields['my_field'].help_text = render_to_string('components/my-template.html')
            #                      ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 

我的模板.html

{% load i18n %}
<table class="table table-bordered">
    <tr>
        <th>{% trans 'Externe' %}</th>
    </tr>
    <tbody class="text-muted">
        <tr>
              <td>{% trans "En lien avec les relations de travail" %}</td>
          </tr>
          <tr>
              <td>{% trans "-" %}</td>
          </tr>
    </tbody>
</table>
于 2014-12-16T15:56:27.610 回答
-6

使用带有只读的 textarea 标签

<textarea readonly> <p>stuff</p> </textarea>
于 2013-11-07T10:37:09.200 回答