2010-11-04 53 views
1

在django管理员中,我为具有raw_id_fields集的ManyToMany字段设置了TabularInline。它显示html输入字段旁边对象的unicode()。设置模型的__unicode__以在admin中显示html标签

我希望它显示一个电子邮件链接。所以在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源文件的想法。如何在不改变源代码的情况下解决这个问题?

+0

你有没有想过这个? – thumbtackthief 2014-08-13 19:54:53

回答

3

您应该尝试mark_safe您返回的值。然后,字符串不应该逃脱了!

+0

我只是试图把__unicode__定义中的mark_safe,它没有这样做。我应该把它作为TabularInline某处的属性吗? – mhost 2010-11-04 18:13:29

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可能会导致问题。

+0

html可能是错误的,但你得到的想法:D – zsquare 2010-11-04 08:09:32

+0

+1,'allow_tags'是要走的路 – 2010-11-04 08:59:43

+0

这是行不通的。我想我的问题还不够清楚。这不是模型的显示(所以不使用list_display,因此allow_tags不起作用)。这是一个带有raw_id_fields的TabularInline。在输入旁边,它显示对象的__unicode__描述。所以我需要它安全地显示__unicode__。 – mhost 2010-11-04 17:39:35

4

下面是一个例子,其最终结果与sebpiq使用SafeUnicode的结果相同,“为了HTML输出目的,已经明确标记为'安全'的unicode子类。”

例如

from django.utils.safestring import SafeUnicode 

class SomeClass(models.Model): 
... 

    def __unicode__(self): 

     return SafeUnicode("foo: %s<br>bar: %s" % (foo, bar)) 
+0

这对mark_safe没有帮助时有效。似乎特定于使用'__unicode__'方法。 – Aaron 2016-06-02 18:42:11

相关问题