Django 表单值不进行 HTML 转义

4 投票
1 回答
8108 浏览
提问于 2025-04-15 11:12

我需要设置Django的表单中的选择字段,让它显示货币符号。因为Django的表单会自动处理所有的HTML字符,所以我无法显示美元符号()或英镑符号(£)。

<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上。
而上面的<SELECT>是通过Django表单生成的。

currencies = (('&#36;', '&#36;'), 
              ('&pound;', '&pound;'), 
              ('&euro;', '&euro;'))    
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('&#36;'), mark_safe('&#36;')), 
              (mark_safe('&pound;'), mark_safe('&pound;')), 
              (mark_safe('&euro;'), mark_safe('&euro;')))    

使用 autoescape off

另外,你也可以在模板中 关闭一段代码的转义。在 {% autoescape off %}{% endautoescape %} 标签之间的所有内容都不会被转义。

使用Unicode字符

如果其他方法都不行,可以尝试以下方法。在包含你货币元组的文件中,把以下代码放在第一行或第二行:

# coding=utf-8

然后在你的货币元组中放入实际的Unicode字符:

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

撰写回答