update personalizados formularios form fields example avanzados django django-forms

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:

  1. modifique el método __init__() ;
  2. después de super(MyForm, self).__init__(*args, **kwargs) ;
  3. asigne el resultado de render_to_string() a self.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>