为了账号安全,请及时绑定邮箱和手机立即绑定

如何用 django 渲染 html?

如何用 django 渲染 html?

料青山看我应如是 2022-10-13 17:17:17
嗨,我正在练习 Django 和 Python我遇到了解析 HTML 问题,我通过管理页面保存了一些 html,我尝试渲染,但它渲染为字符串!这是我模板的一部分描述 <- 列是我的问题其他列渲染得很好{% block content %}<div class="article-detail">    <div class="article">        <img src="{{ article.thumb.url }}" />        <h2>{{ article.title }}</h2>        <p>{{ article.date }}</p>        <div>{{ article.description }}        </div>    </div></div>{% endblock %}这是我的模型from tinymce import HTMLFieldclass Article(models.Model):    title = models.CharField(max_length=100)    slug = models.SlugField()    body = models.TextField()    description = HTMLField('Content', blank=True)    body = models.TextField()    date = models.DateTimeField(auto_now_add=True)    thumb = models.ImageField(default='default.png', blank=True)    ...我的这部分观点def article_detail(request, slug):    article = Article.objects.get(slug=slug)    return render(request, 'articles/article_detail.html', {'article': article})我尝试使用 javascript{% block content %}<div class="article-detail">    <div class="article">        <img src="{{ article.thumb.url }}" />        <h2>{{ article.title }}</h2>        <p>{{ article.date }}</p>    </div></div><script>    var article = "<div>{{ article.description }}</div>"    console.log(article);    document.write(article);</script>{% endblock %}我希望这项工作,但我得到了 JS 语法错误控制台不显示任何东西为什么?如果它转换为字符串,它应该可以工作....什么是最好的渲染方式?我为我糟糕的英语感到抱歉
查看完整描述

4 回答

?
胡子哥哥

TA贡献1825条经验 获得超6个赞

Django 的模板引擎会自动转义,所以你真的不需要转义。

如果你像 {{article.description|safe}} 这样添加模板过滤器“安全”,那么你确实需要担心诸如 html 注入之类的事情,因为“安全”将字符串标记为这样,这意味着它不会被转义。

还有一个 {% autoescape on %}...{% endautoescape %} 模板标签,如果需要,可以将其中的“on”更改为“off”。默认情况下它是打开的,并且不需要标签。

其他模板引擎可能默认不会转义,Jinja2 就是其中之一。


查看完整回答
反对 回复 2022-10-13
?
饮歌长啸

TA贡献1951条经验 获得超3个赞

默认情况下,Django 自动转义模板变量的输出以避免跨站点脚本。如果要呈现未转义的字符串,则可以使用safe过滤器或模板块autoescape,如下所示:


{{ var|safe }}

或者


{% autoescape off %}

    {{ var }}

{% endautoescape %}


查看完整回答
反对 回复 2022-10-13
?
慕容森

TA贡献1853条经验 获得超18个赞

将安全过滤器添加到您的 html 模板 var。Django 自动转义 html 以防止 html 注入。您可以通过添加 |safe 来“关闭它”。例如:

<div> {{ article.description|safe }} </div>


查看完整回答
反对 回复 2022-10-13
?
翻翻过去那场雪

TA贡献2065条经验 获得超13个赞

Django 模板处理器正在转义模型中的 HTML 语法。我认为您需要包含此标头标记才能使您的 tinyMCE 应用程序正常工作。它是一些可能呈现 HTMLField 的 javascript 代码。


<head>

    ...

    {{ form.media }}

</head>


查看完整回答
反对 回复 2022-10-13
  • 4 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信