Как ввести HTML в текст справки поля формы Django? - программирование
Подтвердить что ты не робот

Как ввести HTML в текст справки поля формы Django?

Я попытался создать текст справки для поля выбора в моей форме 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?

4b9b3361

Ответ 1

Вы можете использовать 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")

Ответ 2

Вы также можете пометить его как безопасный в шаблоне, если вы сами зацикливаете форму:

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

Это очень простой пример этого в шаблоне. Вам нужно будет сделать больше, чтобы это выглядело хорошо.

Ответ 3

Вы можете использовать внешний файл для повышения удобства обслуживания и разделения проблем:

  • изменить метод формы __init__();
  • после super(MyForm, self).__init__(*args, **kwargs);
  • присвойте результат render_to_string() self.fields['my_field'].help_text.

forms.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')
            #                      ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ 

мой-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>

Ответ 4

Использовать тег textarea с readonly

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