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 はヘルプ テキストの出力としてレンダリングされます。Django フォーム フィールドのヘルプ テキストに HTML を入力するにはどうすればよいですか?

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 import 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>
于 2014-12-16T15:56:27.610 に答える