2016-12-26 79 views
0

Django的1.10,Python 2.7版Django的render_to_string产生<br>标签

我使用render_to_string函数来得到一个模板呈现的内容,并在管理员的自定义字段的内容使用它。 所以我有一些代码,看起来像在管理员的类:

def checks(self, obj): 
     # ... 
     return render_to_string('template.html', context) 

    checks.allow_tags = True 

template.html我只有一个表:

<table> 
    {% for something in somethings %} 
     <tr><td>...</td></tr> 
    {% endfor %} 
</table> 

但是,这会产生大量的<br>实际表之前:

<br> 
<br> 
<br> 
... 
<br> 
# Actual table 
<br> 
<br> 

这种情况下的问题是什么?

UPD。我可以通过从我的模板文件中删除空格和换行符来修复它。但显然,这并不是我希望它工作的方式。

+0

贵'template.html'有空格前后''

标签之后? –

+0

@EvansMurithi nope。它以'

'开始,以'
'结尾。 –

回答

2

allow_tagsdeprecated since version 1.9

在旧版本中,你可以添加一个allow_tags属性的方法 防止自动转义。此属性已弃用,因为它更安全 以替代使用format_html(),format_html_join()或mark_safe()。

尝试:

def checks(self, obj): 
     # ... 
     return mark_safe(render_to_string('template.html', context)) 
+0

已经试过这个,不会帮助。 –

+0

from django's src:'class AdminReadonlyField(object):... def contents(self):... if hasattr(value,“__html__”):result_repr = value ... else:... result_repr = linebreaksbr(result_repr )'。这意味着如果你返回mark_safe(),它不会调用'linebreaksbr',而你不会看到'
'。请再试一次。 – Udi