2012-09-11 102 views
0

爱django-tables ...但是我敢肯定的是,解决的一些小问题让我觉得非常适合。当值我考上一个给定的行/列是这样的:在django-tables2中格式化表格单元格内容

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

我希望浏览器解析和渲染单元格中的内容......看起来像这样:

一些
随机
也就是说
返回

逃避我传递的内容和这样显示出来:

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

当然有一些我错过的标志或选项?

+0

你可以告诉我你的'表'代码,以及你如何提供HTML值到表? –

+0

为了清楚起见,我们假设表的所有列都只是column_name = tables.Column(),并且我已经足够混乱以便将存储过程输出绑定到提供包含标记的字符串值的表上。我实际上做的有点不同,但我不确定它在这次对话中的重要性。 – codemonkey

回答

1

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

我不得不改变我的模板代码呈现Django的表2所示:

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

这不是正确的解决方案。 –

+0

我其实同意。这是一个黑客。我很确定有一些方法可以使用模板来格式化单个单元格的内容,但是当我尝试这种方式时,我无法获得通过的绑定数据。 – codemonkey

+0

我想我的“答案”应该已经清楚表明,通过“找到它”,我的意思是我找出了行为的原因以及预防它的方法。一个真正的“答案”会做一些事情,而不是禁用autoescape ...这是一个很好的理由默认行为。 – codemonkey

2

如果一些数据已经包含HTML,最简单的解决方法是使用一个TemplateColumn,而不是一个正常的列,标记值作为安全:

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

如果数据未定义为属性,则非常有用。 Regneel的解决方案仅适用于将数据定义为django模型中的属性。 – user1255933

+0

这应该是正确的解决方案 –

6

使用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

+0

要返回变量而不是静态字符串,需要传递值参数,如render_html(self,value)和return mark_safe(value +'更多东西')。花了我一会儿才弄清楚这一点;-) – user1255933

相关问题