Как иметь ссылку в метке поля формы - PullRequest
15 голосов
/ 22 декабря 2008

Я хочу установить флажок для условий и положений, на ярлыке которых должна быть ссылка на страницу с условиями и положениями.

В следующем поле будет метка с экранированными тегами.

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

Ответы [ 5 ]

30 голосов
/ 06 ноября 2011

Импорт mark_safe от django из utils.safestring, как описано в http://www.kelvinism.com/howtos/using-html-django-form-label/

Из ссылки:

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>?)'))
11 голосов
/ 16 октября 2012

Вот правильная ссылка на документацию Django на предмет итерации в форме .

То, что вы хотите:

<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>
7 голосов
/ 23 июня 2014

Если вы не хотите жестко задавать URL-адрес, вы можете установить метку поля из конструктора:

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)
3 голосов
/ 22 декабря 2008

Я не уверен, как работает django, но если метка в приведенном выше коде создает:

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

элемент, тогда это НЕ способ сделать это.

Элемент label по умолчанию выбирает связанное поле, поэтому вы будете смешивать действия в два клика (одно для проверки, а другое для открытия окна)

Я бы просто добавил ваш ярлык и a: href рядом с ним.

<label>I agree to terms&conditions</label> (<a href="terms-conditions.html">terms&conditions</a>)
2 голосов
/ 23 декабря 2008

Дай угадаю - ты используешь django_registration - Я вижу, что я не единственный, у кого была эта проблема:)

Как и scunliffe , указанная разметка лучше всего не указывать в теге label - вот небольшой фрагмент шаблона для выполнения того, что вы хотите, не прибегая к написанию всего этого в 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 %}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...