我正在尝试让我的自定义小部件显示,而Django不会转义HTML。这是我的小部件:
class MyInput(Widget):
def __init__(self, obj, attrs=None):
super(MyInput, self).__init__(attrs)
def render(self, name, value, attrs=None):
return mark_safe(u'<img src="{url}">').format(url=self.url)
它通过表单工厂实例化:
def MyFormFactory():
class MyForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(MyForm, self).__init__(*args, **kwargs)
desired_fields = ['field1', 'field2',]
for f in desired_fields:
self.fields[f].widget = MyInput(self.instance)
return MyForm
在我的Django Admin类中调用它:
class MyAdminClass(admin.ModelAdmin):
form = MyFormFactory()
除了我的小部件有HTML转义这一事实外,一切都“有效”。如果我通过直接表单实例化(使用常规表单类和表单字段小部件分配)来使用小部件,则不会发生这种情况,但我需要能够通过工厂这样设置它。如何强制Django允许HTML?在这种情况下,allow_tags似乎不适用,我已经使用了mark_safe。我还缺少什么?
答案 0 :(得分:2)
尝试更改
return mark_safe(u'<img src="{url}">').format(url=self.url)
到
return mark_safe(u'<img src="{url}">'.format(url=self.url))
第一行返回一个字符串,后者返回一个SafeBytes
实例,Django以不同的方式处理它们。