Значения Django Form без HTML escape - PullRequest
3 голосов
/ 22 апреля 2009

Мне нужно установить формы Django.ChoiceField для отображения символов валюты. Поскольку формы django экранируют все символы HTML ASCII, я не могу получить $ ( & euro; ) или & pound; ( & pound; ) для отображения символа валюты.

<select id="id_currency" name="currency">
    <option value="&amp;#36;">&#36;</option>
    <option value="&amp;pound;">&pound;</option>
    <option value="&amp;euro;">&euro;</option>
</select>

Не могли бы вы предложить какие-либо методы для отображения действительного символа валюты HTML хотя бы для части значения параметра?

<select name="currency" id="id_currency">
    <option value="&amp;#36;">$</option>
    <option value="&amp;pound;">£</option>
    <option value="&amp;euro;">€</option>
</select>

Обновление: Обратите внимание, что я использую Django 0,96 , так как мое приложение работает на Google App Engine.
И выше визуализируется с использованием форм Django.

currencies = (('&#36;', '&#36;'), 
              ('&pound;', '&pound;'), 
              ('&euro;', '&euro;'))    
currency = forms.ChoiceField(choices=currencies, required=False)

Спасибо
Arun.

1 Ответ

8 голосов
/ 22 апреля 2009

Вы можете использовать « safe » в шаблоне или « mark_safe » в представлении, отключить автоэкранирование в шаблоне, или используйте символы Unicode вместо сущностей HTML в вашей форме.

Использование mark_safe

from django.utils.safestring import mark_safe

currencies = ((mark_safe('&#36;'), mark_safe('&#36;')), 
              (mark_safe('&pound;'), mark_safe('&pound;')), 
              (mark_safe('&euro;'), mark_safe('&euro;')))    

Использование autoescape off

В качестве альтернативы в вашем шаблоне вы можете отключить экранирование для блока кода . Все между тегами {% autoescape off %} и {% endautoescape %} не сбежит.

Использование символов Юникода

Когда ничего не работает, попробуйте следующее. В файле, содержащем ваш кортеж валют, поместите следующую строку в качестве первой или второй строки:

# coding=utf-8

и затем в вашем кортеже валют введите действительные символы Юникода:

currencies = (('$', '$'), 
              ('£', '£'), 
              ('€', '€')) 
...