【发布时间】:2014-07-08 14:48:16
【问题描述】:
我正在尝试将一些 HTML 模板包含到我的一个模型的 django change_form.html 默认模板中。 我的主要目标是在 Django 后端创建一些图表。
我遇到的问题是换行符不断被<br /> 取代。
这特别麻烦,因为它破坏了我真正感兴趣的页面中包含的 JavaScript 代码。
目前我的方法是在我的 ModelAdmin 类上使用 readonly_fields,并在我的模型中使用一个函数,该函数返回我的模板的 render_to_string。
我的模型
class Link(models.Model):
user = models.ForeignKey(
'auth.User',
verbose_name=_('Author'),
related_name="tinylinks",
)
link = models.CharField(
max_length=2500,
verbose_name=_('Link'),
)
clicks = models.PositiveIntegerField(
default=0,
verbose_name=_('Amount of views'),
)
def click_statistics(self):
response = render_to_string(
'admin/links/link/click_statistics.html', {})
ModelAdmin 类
class LinkAdmin(admin.ModelAdmin):
list_display = ('link', 'user', 'clicks')
search_fields = ['link', 'user']
readonly_fields = ('click_statistics',)
fieldsets = [
('Link', {'fields': ['user', 'link', 'clicks',]}),
('Statistics', {'fields': ['click_statistics',]}),
]
这将是 click_statistics.html
<table border="0" cellspacing="">
<tr>
<td valign="top">
<div id='stat_line' class='stats_line line' style='display:block'>
<script id="graphstat_line" type="text/javascript">
function graphstat_line() {
var data = google.visualization.arrayToDataTable([]);
var options = {
'legend': "none",
'pointSize': 3,
'theme': "maximized",
'curveType': "function",
'width': 430,
'height': 220,
'hAxis': {minTextSpacing: 80, maxTextLines: 1, maxAlternation: 1},
'vAxis': {minValue: -0.5, format: '#'},
'colors': ['#2a85b3']
}
new google.visualization.LineChart( document.getElementById('visualization_stat_line') ).draw( data, options );}
google.setOnLoadCallback( graphstat_line );
</script>
<div id="visualization_stat_line"></div>
</div>
</td>
</tr>
</table>
我的问题如下:
- 当 render_to_string 的输出包含在管理 change_form.html 模板中时,为什么换行符会被
<br />替换? - 有什么办法可以阻止这种行为?
【问题讨论】:
-
"Django" 不这样做。你的代码正在以某种方式做到这一点。但由于您尚未发布任何内容,我们无法帮助您修复它。
-
感谢您的回复丹尼尔,我会用代码更新我的问题。
-
我也遇到过这个问题。绝对似乎是Django的错。当我在我的管理方法中打印该值时,它看起来不错,但返回给浏览器的结果包含“
”。非常令人沮丧。我的解决方法是自己替换所有换行符,并确保我的内联 JS 代码格式正确以评估为单行。另外,不要介意罗斯曼的粗鲁。他有点傲慢。 -
谢谢Cerin,很高兴知道这是别人经历过的事情。最后我走了一条完全不同的路,不再尝试在管理员中添加该模板。
标签: django django-templates django-admin