Django 表单值不进行 HTML 转义
我需要设置Django的表单中的选择字段,让它显示货币符号。因为Django的表单会自动处理所有的HTML字符,所以我无法显示美元符号(€)或英镑符号(£)。
<select id="id_currency" name="currency">
<option value="&#36;">$</option>
<option value="&pound;">£</option>
<option value="&euro;">€</option>
</select>
你能建议一些方法,让我至少在选项的值部分显示实际的HTML货币字符吗?
<select name="currency" id="id_currency">
<option value="&#36;">$</option>
<option value="&pound;">£</option>
<option value="&euro;">€</option>
</select>
更新:
请注意,我使用的是Django 0.96,因为我的应用程序运行在Google App Engine上。
而上面的<SELECT>是通过Django表单生成的。
currencies = (('$', '$'),
('£', '£'),
('€', '€'))
currency = forms.ChoiceField(choices=currencies, required=False)
谢谢,
Arun.
1 个回答
9
你可以在模板中使用 "safe",或者在视图中使用 "mark_safe",来关闭自动转义功能,或者在你的表单中使用Unicode字符来代替HTML实体。
使用 mark_safe
from django.utils.safestring import mark_safe
currencies = ((mark_safe('$'), mark_safe('$')),
(mark_safe('£'), mark_safe('£')),
(mark_safe('€'), mark_safe('€')))
使用 autoescape off
另外,你也可以在模板中 关闭一段代码的转义。在 {% autoescape off %}
和 {% endautoescape %}
标签之间的所有内容都不会被转义。
使用Unicode字符
如果其他方法都不行,可以尝试以下方法。在包含你货币元组的文件中,把以下代码放在第一行或第二行:
# coding=utf-8
然后在你的货币元组中放入实际的Unicode字符:
currencies = (('$', '$'),
('£', '£'),
('€', '€'))