【问题标题】:Rendering custom template tags from database in Django在 Django 中从数据库中呈现自定义模板标签
【发布时间】:2012-12-18 12:22:56
【问题描述】:

我对 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>

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

    原来render_as_template 标签找到here 确实有效,我只是误解了它。初学者的错误。 sn-p 的文档中没有指定两件事,但我自己没能掌握。

    因此,您将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 %}
    

    现在完美运行了!

    【讨论】:

    • 我几乎有同样的问题。但我的模板标签中有静态。当我做 render_as_template 内容时,我得到无效的块标签:'静态'。有什么解决办法吗?
    【解决方案2】:

    要在 Django 中创建自定义标签,您需要编写一个标签函数然后注册它。 Link to Official Django Docs on the subject.

    【讨论】:

    • 我已经创建并注册了几个自定义标签。当它们不属于我的帖子内容(即从数据库中提取为 HTML)时,它们可以很好地与我的模板配合使用。
    猜你喜欢
    • 2015-03-14
    • 2017-05-04
    • 2013-10-18
    • 2015-01-20
    • 2020-04-19
    • 1970-01-01
    • 2019-10-27
    • 2011-08-27
    • 1970-01-01
    相关资源
    最近更新 更多