我想將一些HTML模板包含到我的模型之一的django change_form.html默認模板中。 我的主要目標是在Django後端創建一些圖表。換行符在Django admin中使用HTML換行符
我一直在遇到的問題是,換行符不斷被<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的輸出包含在admin change_form.html模板中時,爲什麼換行符被替換爲
<br />
? - 有什麼辦法可以阻止這種行爲?
「Django」不會這樣做。你的代碼是以某種方式做的。但是由於您尚未發佈任何內容,因此我們無法幫助您解決問題。 –
謝謝你的迴應Daniel,我會用代碼更新我的問題。 – Claudiu
我也遇到過這個問題。肯定似乎是Django的錯。當我在我的管理方法中打印值時,它看起來很好,但返回給瀏覽器的結果包含「
」。非常令人沮喪。我的hacky解決方法是自己替換所有換行符,並確保我的內聯JS代碼被正確格式化爲一行代碼。另外,不要介意羅斯曼的粗魯。他有點傲慢。 – Cerin