gpt4 book ai didi

python - 在 Django 中渲染数据库中的自定义模板标签

转载 作者:行者123 更新时间:2023-11-30 23:38:47 26 4
gpt4 key购买 nike

我对 Django 还很陌生,正在尝试为我的网站构建一个博客应用程序。我创建了一个模型来存储博客文章,其中包括帖子正文的文本字段,使用 TinyMCE (通过 Grappelli)创建并转换为 HTML。我想在此帖子正文中嵌入自定义模板标签,这些标签作为模板标签保存在数据库中,但随后在我的网站上请求时呈现为 HTML。到目前为止,我没有运气让标签正确呈现。如何让 Django 正确解释和渲染我的帖子中的模板标签?自定义标签在直接在模板中加载和实现时工作正常,正是这种间接加载给我带来了麻烦。我试过this snippet here (编辑:它可以工作,我只是做错了!),但它不能正常工作。

这是我的观点:

from django.shortcuts import render_to_response
from myproject.apps.blog.models import Post

def blog_detail_view(request, year, month, day, slug):
selected_post = Post.objects.get(status=1, pub_date__year = year, pub_date__month = time.strptime(month, "%b")[1], pub_date__day = day, slug = slug)
return render_to_response('blog/detail.html', locals())

以及我的模板的相关部分:

...
{% load my_custom_tag %}

<div class="entry">
{{ selected_post.body|safe }}
</div>
...

以下是保存到 Post.body 的文本示例:

My first paragraph.
{% my_custom_tag var1 var2 %}
My second paragraph.

目前,这将呈现为:

<p>My first paragraph.</p>
<p>{% my_custom_tag var1 var2 %}</p>
<p>My second paragraph.</p>

当我想要这样的东西时:

<p>My first paragraph.</p>
<p><a href="var1"><img src="var2"></a></p>
<p>My second paragraph.</p>

最佳答案

事实证明,发现了 render_as_template 标记 here确实有效,我只是误解了它。初学者的错误。对于我自己无法获取的代码片段,文档中有两件事没有指定。

因此,您可以将 render_as_template 标记放入模板中,如下所示:

{% load render_as_template %}
{% render_as_template myobject.attribute %}

从而允许渲染 myobject.attribute 中的任何模板标签。这是我遇到麻烦的地方:

首先,我将帖子正文作为 selected_post.body|truncatewords_html:"100"|safeselected_post.body|safe< 传递给 render_as_template/。模板标记无法处理属性上的过滤器,并且似乎将它们解释为对象名称的一部分。由于该对象不存在,因此不会渲染任何内容。我的模板中需要的是:

{% autoescape off %}
{% filter truncatewords_html:"100" %}
{% render_as_template selected_post.body %}
{% endfilter %}
{% endautoescape %}

第二,如果我的帖子内容是:

My first paragraph.
{% my_custom_tag var1 var2 %}
My second paragraph.

然后为了解释 my_custom_tag,我需要添加到我的帖子中:

{% load my_custom_tag %}

现在可以完美运行了!

关于python - 在 Django 中渲染数据库中的自定义模板标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14150778/

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