如何在Django表单字段的帮助文本中输入HTML?

时间:2012-05-22 16:38:22

标签: django django-forms

我尝试使用

为我的Django表单中的Choice Field生成帮助文本
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 个答案:

答案 0 :(得分:41)

你可以在模型中使用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")

答案 1 :(得分:10)

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

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

这是在模板中这样做的一个非常简单的例子。你需要做的不仅仅是让它看起来不错。

答案 2 :(得分:3)

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

  1. 修改形式的__init__()方法;
  2. super(MyForm, self).__init__(*args, **kwargs);
  3. 之后
  4. render_to_string()的结果分配给self.fields['my_field'].help_text
  5. forms.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')
                #                      ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 
    

    MY-template.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>
    

答案 3 :(得分:-6)

使用带有readonly的textarea标签

<textarea readonly> <p>stuff</p> </textarea>