【问题标题】:formatting table cell content in django-tables2在 django-tables2 中格式化表格单元格内容
【发布时间】:2012-09-11 22:14:11
【问题描述】:

喜欢 django-tables...但是我确信解决起来很简单的事情让我很适应。当我为给定的行/列传递的值是这样的:

some<br/>random<br/>words<br/>returned

我希望浏览器解析并呈现该单元格中的内容...看起来像这样:

一些
随机
单词
返回

not 转义我传递的内容并像这样显示它:

some<br/>random<br/>words<br/>returned

肯定有一些我错过的标志或选项?

【问题讨论】:

  • 你能告诉我你的Table 代码,以及你是如何向表格提供 HTML 值的吗?
  • 为了清楚起见,假设表的所有列都只是 column_name = tables.Column() 并且我很混乱,无法将存储过程输出绑定到提供字符串的表包含标记的值。我实际上做了一些不同的事情,但我不确定它在这次谈话的背景下是否重要。

标签: django django-tables2


【解决方案1】:

如下使用mark_safe:

import django_tables2 as tables
from django.utils.safestring import mark_safe

class testTable(tables.Tables):
    id = tables.Column()
    html = tables.Column()

    def render_html(self):
        return mark_safe('some<br/>random<br/>words<br/>returned')

同样的问题被问到in this thread

【讨论】:

  • 要返回变量而不是静态字符串,需要传递 value 参数,如 render_html(self, value) 和 return mark_safe(value + ' more stuff ')。我花了一段时间才弄清楚这一点;-)
【解决方案2】:

如果您的某些数据已经包含 HTML,最简单的解决方案是使用 TemplateColumn 而不是普通列并将值标记为安全:

class Table(tables.Table):
    html_data = tables.TemplateColumn("{{ value|safe }}")
    # ...

【讨论】:

  • 如果数据未定义为属性,则非常有用。 Regneel 的解决方案只有在数据被定义为 django 模型中的属性时才有效。
【解决方案3】:

哈。找到了。自动转义我的内容的不是 django-tables2,而是 django 模板系统本身:https://code.djangoproject.com/wiki/AutoEscaping

我不得不更改我的模板代码以像这样呈现 django-table2:

{% autoescape off %}
    {% load render_table from django_tables2 %}
    {% render_table route_table %}
{% endautoescape %}

【讨论】:

  • 我真的同意。这是一个黑客。我很确定有某种方法可以使用模板来格式化单个单元格内容,但是当我尝试这种方式时,我终生无法获得通过的绑定数据。
  • 我想我的“答案”应该清楚地表明,“找到它”是指我已经找出了该行为的原因和防止它的方法。一个真正的“答案”会做一些事情,而不是禁用自动转义......这是有充分理由的默认行为。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 2019-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多