设置模型的__unicode__以在admin中显示html标签

时间:2010-11-04 05:36:05

标签: django django-admin

在django admin中,我有一个带有raw_id_fields设置的ManyToMany字段的TabularInline。它会在html输入字段旁边显示对象的 unicode ()。

我希望它能够显示电子邮件链接。所以在模型的 unicode ()函数中,我输入了html标签来创建链接。但是,它显示的是html标签。

有没有办法告诉管理员unicode可以安全地显示标签?

我尝试过使用allow_tags属性,但这似乎只是一个ModelAdmin属性。

是否可以在不创建新模板的情况下执行此操作?

编辑:

我确切地发现了这种情况。在第159行:django / contrib / admin / widgets.py

        return '&nbsp;<strong>%s</strong>' % escape(truncate_words(obj, 14))

逃脱在那里手动逃避它。我已经测试了删除escape()并且它有效。我不喜欢编辑django源的想法。如何在不改变来源的情况下解决这个问题?

3 个答案:

答案 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。那么字符串就不应该被转义了!