1

我的 Django 表单上有一个包含®HTML 实体的下拉框。有没有一种简单的方法可以让 Django 将其标记为安全?

这不起作用:

{{ form.myoptions.label_tag }}
{{ form.myoptions|safe }}

编辑:

我应该提到下拉框是从一个ForeignKey字段生成的。

4

1 回答 1

3

你是对的 - 它不起作用......我想最简单的方法是将它标记为对 python 安全。

from django.utils.safestring import mark_safe

MY_CHOICES = [
    ('foo', mark_safe('& foo')),
    ('bar', 'bar'),
]

根据来源,您可以ModelChoiceField.choices手动定义一个或编写一个新字段并覆盖label_from_instance

class MyModelForm(forms.ModelForm):
    class Meta:
        model = Foo
    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)
        self.fields['foo'].choices = ((foo.id, mark_safe(foo.bar)) for foo in Foo.objects.all())



class SafeModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj): 
        return mark_safe(obj)

我想我更喜欢自己构建选择,这样任何其他神奇ModelForm field -> form field的转换都不会被覆盖。

于 2012-06-09T00:21:31.553 回答