1

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

这是我的看法:

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>
4

2 回答 2

3

事实证明,在这里render_as_template找到的标签确实有效,我只是误解了它。初学者的错误。有两件事没有在文档中指定我未能自行获取的代码段。

因此,您将render_as_template标签放在模板中,如下所示:

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

myobject.attribute因此允许呈现其中的任何模板标签。这是我遇到麻烦的地方:

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

{% 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 %}

现在它完美地工作了!

于 2013-01-17T14:59:30.657 回答
0

要在 Django 中创建自定义标签,您需要编写一个标签函数然后注册它。链接到有关该主题的官方 Django 文档。

于 2013-01-04T06:24:35.723 回答