gpt4 book ai didi

django - 在 Django 管理中,换行符被替换为 HTML 换行符

转载 作者:行者123 更新时间:2023-12-02 03:38:38 24 4
gpt4 key购买 nike

我正在尝试将一些 HTML 模板包含到我的模型之一的 django change_form.html 默认模板中。我的主要目标是在 Django 后端创建一些图表。

我遇到的问题是换行符不断被 <br /> 替换。这特别麻烦,因为它破坏了我真正感兴趣的包含在页面上的 JavaScript 代码。

目前我的方法是使用 readonly_fields在我的 ModelAdmin 类上加上我的模型中返回 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>

我的问题如下:

  • 为什么换行符被替换为 <br /> render_to_string 的输出何时包含在管理的change_form.html 模板中?
  • 有什么方法可以阻止这种行为吗?

最佳答案

你在使用 django-suit 吗?如果是这样,那么问题出在模板 suit/templates/admin/includes/fieldset.html 中:

    {# If multi-fields and wrap controls too #}
{% if not singlefield %}
<div class="multi-field-controls">
{% endif %}

{% if field.is_readonly %}
<span class="readonly">{{ field|field_contents_foreign_linked|linebreaksbr }}</span>
{% else %}
{{ field.field }}
{% endif %}

{# For single field errors#}
{% if singlefield and line.errors %}
<span class="help-inline">{{ line.errors }}</span>
{% endif %}

将该模板复制到 INSTALLED_APPS 上较高位置的应用或 TEMPLATE_DIRS 中列出的目录(例如 TEMPLATE_DIR/admin/includes/fieldset.html)并删除 |linebreaksbr 从上面的行开始。

几个月前我遇到了这个问题,完全是偶然发现了解决方案。

关于django - 在 Django 管理中,换行符被替换为 HTML 换行符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23758135/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com