不带HTML escap的Django表单值

2024-05-16 16:43:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要设置Django forms.ChoiceField来显示货币符号。由于django表单转义了所有HTML ASCII字符,因此我无法获取&;36;(欧元)或&;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应用程序引擎上运行。
上面的<;SELECT>;使用Django表单呈现。

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

谢谢,
阿伦。


Tags: djangoid表单valuehtml货币符号forms
1条回答
网友
1楼 · 发布于 2024-05-16 16:43:58

您可以在模板中使用“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

作为模板中的另一种选择,您可以turn off escaping for a block of code。 标签{% autoescape off %}{% endautoescape %}之间的所有内容 不会逃脱的。

使用Unicode字符

当其他方法都不起作用时,试试下面的方法。在包含货币元组的文件中,将以下行作为第一行或第二行:

# coding=utf-8

然后在您的货币tuple中输入实际的unicode字符:

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

相关问题 更多 >