personalizados - modelform django
¿Cómo ingreso HTML en el texto de ayuda de un campo de formulario Django? (4)
Intenté generar un texto de ayuda para un campo de elección en mi formulario de Django con
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")
Sin embargo, el HTML sin procesar se representa como salida en el texto de ayuda. ¿Cómo ingreso HTML en el texto de ayuda de un campo de formulario Django?
Alternativamente, puede marcarlo como seguro en la plantilla si recorre usted mismo el formulario:
{% for f in form %}
{{f.label}}{{f}}{{f.help_text|safe}}
{%endfor%}
Ese es un ejemplo muy simple de hacerlo en la plantilla. Tendrías que hacer más que eso para que se vea bien.
Puede usar mark_safe
en el modelo para indicar que el html es seguro y debe interpretarse como tal:
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")
Puede usar un archivo externo para aumentar la capacidad de mantenimiento y la separación de la preocupación:
- modifique el método
__init__()
; - después de
super(MyForm, self).__init__(*args, **kwargs)
; - asigne el resultado de
render_to_string()
aself.fields[''my_field''].help_text
.
forms.py
desde 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'')
# ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^
mi-plantilla.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>
Use una etiqueta textarea con readonly
<textarea readonly> <p>stuff</p> </textarea>