Django管理页面中的富文本编辑器 - 隐藏更改列表中的HTML标记

4

我正在开发一个Django项目,管理员可以使用TinyMCE样式编辑某些内容。一切工作都很顺利,除了一个烦人的细节。

对于某些模型,以富文本模式编辑的字段需要显示在更改列表中。然而,该字段会显示其HTML标签。我希望能够实现以下效果:

{{ field|striptags }}

在修改列表中。

不幸的是,事情并不像覆盖管理模板那么简单,因为内容已经被包装在管理HTML (<td>) 中到达模板。因此,如果我简单地替换

<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item }}{% endfor %}</tr>

使用

<tr class="{% cycle 'row1' 'row2' %}">{% for item in result %}{{ item|striptags }}{% endfor %}</tr>

在'admin/templates/change_list_results.html'中,结果表格显示为未经过样式处理。

我如何在更改列表中获得这些字段的良好预览?

2个回答

8
您可以在模型上创建一个额外的属性,该属性返回已剥离的字段,并在list_display中使用它。
class YourClass(models.Model):
    ....

    @property
    def html_stripped(self):
       from django.utils.html import strip_tags
       return strip_tags(self.html_field)

在您的ModelAdmin中:

list_display = ['html_stripped', ...]
list_display 的文档提到了一些其他选项,并对此主题提供了更多细节。

2
如果问题是您不想看到标记,但希望它们被呈现出来,您可以尝试以下方法:
from django.utils.safestring import mark_safe
class SomeModel(models.Model):
    some_field = models.CharField(max_length=50)
    def some_field_html(self) :
        return mark_safe(self.some_field)

在模型管理中使用 list_display
list_display = ('some_field_html')

关于list_display需要注意的几个特殊情况: ... 如果给定的字符串是模型、ModelAdmin或可调用对象的方法,则Django默认会对输出进行HTML转义。如果您不想对方法的输出进行转义,请在返回时使用mark_safe函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接