我是Django的新手,我正在尝试为我的网站构建一个博客应用程序。我有一个我创建的模型来存储博客帖子,其中包括帖子正文的文本字段,使用TinyMCE创建并转换为HTML(通过Grappelli)。我希望在此帖子正文中嵌入自定义模板标记,这些标记作为模板标记保存在数据库中,但在我的网站上请求时呈现为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>
答案 0 :(得分:3)
事实证明render_as_template
标签找到here有效,我只是误解了它。初学者的错误。在我自己无法获取的代码段文档中没有指定两件事。
因此,您将render_as_template
标记放在模板中,如下所示:
{% load render_as_template %}
{% render_as_template myobject.attribute %}
因此允许呈现myobject.attribute
内的任何模板标签。这是我遇到麻烦的地方:
首先,我将帖子正文传递给render_as_template
selected_post.body|truncatewords_html:"100"|safe
或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 %}
现在它完美无缺!
答案 1 :(得分:0)
要在Django中创建自定义标签,您需要编写标签功能然后注册它。 Link to Official Django Docs on the subject.