在Django管理员中,换行符将被替换为HTML换行符

时间:2014-05-20 11:08:18

标签: django django-templates django-admin

我正在尝试将一些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的输出包含在admin change_form.html模板中时,为什么换行符被<br />替换?
  • 这种行为有什么办法可以阻止吗?

1 个答案:

答案 0 :(得分:3)

你正在使用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

几个月前我遇到了这个问题,偶然发现了这个问题。