在django admin中,我有一个带有raw_id_fields设置的ManyToMany字段的TabularInline。它会在html输入字段旁边显示对象的 unicode ()。
我希望它能够显示电子邮件链接。所以在模型的 unicode ()函数中,我输入了html标签来创建链接。但是,它显示的是html标签。
有没有办法告诉管理员unicode可以安全地显示标签?
我尝试过使用allow_tags属性,但这似乎只是一个ModelAdmin属性。
是否可以在不创建新模板的情况下执行此操作?
编辑:
我确切地发现了这种情况。在第159行:django / contrib / admin / widgets.py
return ' <strong>%s</strong>' % escape(truncate_words(obj, 14))
逃脱在那里手动逃避它。我已经测试了删除escape()并且它有效。我不喜欢编辑django源的想法。如何在不改变来源的情况下解决这个问题?
答案 0 :(得分:4)
如果您的目的是只显示列表视图的电子邮件链接,我建议您为列表视图编写一个自定义列,如下所示:
list_display = ('admin_email', ...)
def admin_email(self, object):
return '<a href="%s">%s</a>'%(admin.email, admin)
admin_email.allow_tags = True
admin_email.short_description = 'Send Email'
这样做更好,因为您可能在很多其他地方使用unicode调用,而html可能会导致问题。
答案 1 :(得分:4)
这是一个示例,其结果与sebpiq使用SafeUnicode
相同,“unicode子类已被特别标记为'安全'用于HTML输出目的。”
e.g。
from django.utils.safestring import SafeUnicode
class SomeClass(models.Model):
...
def __unicode__(self):
return SafeUnicode("foo: %s<br>bar: %s" % (foo, bar))
答案 2 :(得分:3)
您应该对返回的值尝试mark_safe。那么字符串就不应该被转义了!