【问题标题】:Rich text editor in Django admin - Hiding the HTML tags in the change listDjango admin 中的富文本编辑器 - 在更改列表中隐藏 HTML 标签
【发布时间】:2012-02-15 13:48:14
【问题描述】:

我正在开发一个 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' 中,结果表显示为无样式。

我怎样才能在更改列表中对这些字段有一个不错的预览?

【问题讨论】:

    标签: python django django-admin


    【解决方案1】:

    您可以在您的模型上创建一个额外的属性来返回剥离的字段并在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 函数。”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-12-05
        • 1970-01-01
        • 2011-10-30
        • 1970-01-01
        相关资源
        最近更新 更多