在另一个模板中显示来自 Django 视图的 HTML 表

Posted

技术标签:

【中文标题】在另一个模板中显示来自 Django 视图的 HTML 表【英文标题】:Displaying an HTML table from a Django view in another template 【发布时间】:2015-02-15 05:08:59 【问题描述】:

所以我有一个 Django 视图,允许用户上传一个文件,其中包含要通过 Pandas 数据框绘制的数据。然后在一个单独的视图中创建图表,该视图通过图像标签在原始文件上传视图中引用。这非常有效。

现在我还想在图表图像旁边以表格格式显示数据。我正在使用 Panda 内置的 dataframe.to_html() 在单独的视图中创建表,该表也将在文件上传视图中引用。

我的表格已正确生成,并且可以在为表格指定的 URL 中看到。当我尝试从文件上传模板中引用该 URL 时遇到错误。

错误是:

Resource interpreted as Image but transferred with MIME type text/html

我发现这是因为我的文件上传模板有这行:

<img src="% url 'html_graph' %" />

因为视图返回一个HttpResponse 和一个content_typetext/html

有没有办法从我的文件上传模板中引用该 HTML 表格视图,该模板不使用图像标记,因为表格是 HTML 而不是图像?

解决方案

这是我的工作实现:

html_table = df.to_html(index=False)
return render_to_response('myapp/my_template.html', 'html_table': html_table, RequestContext(request))

然后我在我的模板中引用 html_table,例如:

<div>
  html_graph | safe 
</div>

编辑

模板代码中的更正:

<div>
  html_table | safe 
</div>

【问题讨论】:

这绝对有效,但我希望可能有更优雅的解决方案。 我最终弄明白了。感谢@Filly 的建议。 嗨,那么你如何在 django 模板中准确地使用 to_html 方法呢?当我尝试将我的 to_html 变量放在模板中的 variable 中时,它只会在我打开页面时向我显示 html 字符串。 @KidSudi 查看我对问题所做的编辑。希望对您有所帮助。 效果惊人!谢谢! 【参考方案1】:

要解决它,您可以执行下列操作之一:

    以这种方式使用&lt;pre&gt;标签,所有转义字符如&amp;lt; &amp;gt;等都将按原样呈现:

<pre> html_table </pre>

    使用 django 内置的autoescape 过滤器可以如下完成:

% autoescape off % html_table % endautoescape %

第二个选项更好,因为它是由 django 提供的,只有开发人员才有权限。

【讨论】:

以上是关于在另一个模板中显示来自 Django 视图的 HTML 表的主要内容,如果未能解决你的问题,请参考以下文章

Django 1.6:在另一个模板中显示特定模型对象

Django Python - 如何在一个 HTML 模板中显示来自不同表的信息

如何将数据值从视图传递到 Django 中的模板?

Django 模板视图 url 或 FileField

来自 Django 中 ImageField 的图像不会加载到模板中

在另一个视图中显示来自 UIImageView 的照片