繁体   English   中英

Django 模板:如何显示 html 代码?

[英]Django Templates: How to display html code?

我正在尝试在博客中显示一些 HTML 标记,并且想知道是否有一种方法可以直接包装我的 Django 模板的一部分,而无需将其放入上下文变量中。

例如,我想输出一堆代码,一些是 JavaScript,一些是 HTML,还有一些是 CSS。 如果我将代码直接输入到我的 Django 模板中,并将其包装在一些 pre 标签中:

<pre>
  /* Here is the markup I want to display: */
   ... lots of HTML
</pre>

呈现 HTML 标记。

当然,要显示:

<

我应该使用

&lt;

并显示

>

我应该使用

&gt; 

我尝试在代码部分周围添加 Django 标记 {% autoescape on %},但它没有效果,因为我没有渲染上下文变量。

我想知道是否有比用 &lt; 替换每次出现的 < 更简单的方法。 并且每次出现 > 和 &gt;

我也知道,如果我将要显示的代码放入上下文变量中,那么在我的模板中,仅显示该上下文变量就会自动转义代码。

但我宁愿能够直接剪切并粘贴我想要显示的代码到我的模板中。 有没有办法做到这一点并显示 HTML 标签(即

<h1> Heading Level 1 </h1>

无需在我的模板中将其写为:

&lt;h1&gt; Heading Level 1 &lt;/h1&gt;

您必须使用 xmp 标签。

<xmp>
    <h1>Testing Html</h1> 
</xmp>

注意:在您尝试手动实施之前,请查看 ckeditor。 ckeditor 文档,如果这不是您要查找的内容,则仅继续回答。


只需将您的变量包装在下面的 Django 模板标签中。

{% autoescape off %}
    {{your_variable_here}}
{% endautoescape %}

将 HTML 代码放入“your_variable_here”变量中,Django 会将其显示为 HTML。 所有 HTML 标签都可以使用。

编辑:对不起,我错过了重要的部分。 在视图中这样做

from django.template.loader import render_to_string
rendered = render_to_string('my_template.html', {'foo': 'bar'})

并将这个呈现的字符串传递给模板变量,并通过放置行在其他模板中呈现给定的模板

{% autoescape off %}
    {{rendered}}
{% endautoescape %}

这个问题很老,但它出现在搜索引擎上,没有答案是正确的。

Sławek Kabik's 已弃用,Smit Patel's 过于复杂(它使视图膨胀)。

为了执行 OP 的要求,您必须在{% filter %}标签中使用force_escape内置过滤器

例子:

<pre>
  <code>
    {% filter force_escape %}
      <span class="hello">Anything HTML really</span>
    {% endfilter %}
  </code>
</pre>

输出:

<pre>
  <code>
    &lt;span class=&quot;hello&quot;&gt;Anything HTML really&lt;/span&gt;
  </code>
</pre>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM