update tipos personalizados formularios form ejemplos avanzados django

personalizados - tipos de formularios en django



Cómo tener un enlace en la etiqueta de un campo de formulario (5)

No estoy seguro de cómo funciona django, pero si la etiqueta en el código anterior crea un:

<label>I agree to terms&conditions</label>

elemento entonces esta NO es la manera de hacer esto.

El elemento de etiqueta selecciona inherentemente el campo asociado de manera predeterminada, por lo que estaría mezclando dos acciones de clic (una que verifica y otra que abre una ventana)

Solo agregaría su etiqueta y una a: href al lado.

<label>I agree to terms&conditions</label> (<a href="terms-conditions.html">terms&conditions</a>)

Quiero tener una casilla de verificación de términos y condiciones, cuya etiqueta debe contener un enlace a una página con, bueno, términos y condiciones.

El siguiente campo tendrá la etiqueta con las etiquetas escapadas.

BooleanField(label="I agree to <a href=''terms-conditions.html''>terms&conditions</a>")


Importar mark_safe de django desde utils.safestring como se explica en http://www.kelvinism.com/howtos/using-html-django-form-label/

Desde el enlace:

from django.utils.safestring import mark_safe from django import forms class AccountForm(forms.Form): name = forms.CharField(widget=forms.TextInput(), max_length=15, label=mark_safe(''Your Name (<a href="/questions/whyname/" target="_blank">why</a>?)''))


Aquí está el enlace correcto a la documentación de Django sobre el tema de la iteración sobre el formulario .

Lo que quieres es:

<form method="post"> {% for field in form %} <p> {{ field.errors }} {{ field.label_tag }}: {{ field }} {% if field.name == "toc" %} <a href="{% url terms %}">Terms and Conditions</a> {% endif %} </p> {% endfor %} <p><input type="submit" value="Send message" /></p> </form>


Si no desea codificar el URL, puede establecer la etiqueta del campo desde el constructor:

from django import forms from django.core.urlresolvers import reverse_lazy from django.utils.safestring import mark_safe from django.utils.translation import ugettext as _ class ExampleForm(forms.Form): name = forms.CharField(max_length=''255'', label=_(''Name'')) forms.BooleanField(label=_("Terms and Conditions"), required=False) def __init__(self, **kwargs): super(ExampleForm, self).__init__(**kwargs) terms_and_conditions = reverse_lazy("terms_and_conditions") self.fields[''read_terms''].label = mark_safe(_("I have read and agree with the " "<a href=''%s''>Terms and Conditions</a>")) % (terms_and_conditions)


Déjame adivinar - estás usando django_registration - Veo que no soy la única persona que tuvo este problema :)

Como scunliffe dijo que el marcado es mejor dejarlo fuera de la etiqueta, aquí hay un pequeño fragmento de plantilla para hacer lo que quieras sin tener que escribir todo en HTML:

{% for field in form %} {{ field.label_tag }} {% ifequal field.name ''tos'' %} <a href="/terms/">I have read and agreed to the Terms of Service</a> {% endif %} {% endif %}