Python 在Django中从数据库呈现自定义模板标记
我是Django的新手,正在尝试为我的网站构建一个博客应用程序。我创建了一个模型来存储博客文章,其中包括一个用于文章正文的文本字段,使用TinyMCE(通过Grapelli)创建并转换为HTML。我想在此文章正文中嵌入自定义模板标记,这些标记作为模板标记保存在数据库中,但在我的网站上被请求时会呈现为HTML。到目前为止,我没有任何运气让标签正确呈现。如何让Django在我的帖子中正确解释和呈现模板标记?当直接在模板中加载和实现自定义标记时,它工作得很好,正是这种间接加载给我带来了麻烦。我试过(编辑:它可以工作,我只是做错了!),但它没有正常工作 以下是我的看法:Python 在Django中从数据库呈现自定义模板标记,python,django,django-templates,Python,Django,Django Templates,我是Django的新手,正在尝试为我的网站构建一个博客应用程序。我创建了一个模型来存储博客文章,其中包括一个用于文章正文的文本字段,使用TinyMCE(通过Grapelli)创建并转换为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>
...
目前,这将呈现为:
<p>My first paragraph.</p>
<p>{% my_custom_tag var1 var2 %}</p>
<p>My second paragraph.</p>
我的第一段
{%my_自定义_标记var1 var2%}
我的第二段
当我想要这样的东西时:
<p>My first paragraph.</p>
<p><a href="var1"><img src="var2"></a></p>
<p>My second paragraph.</p>
{% load render_as_template %}
{% render_as_template myobject.attribute %}
我的第一段
我的第二段
要在Django中创建自定义标记,您需要编写一个标记函数,然后注册它 原来找到的render_as_template
标记确实有效,我只是误解了它。初学者的错误。有两件事没有在文档中为我自己未能获取的代码片段指定
因此,将render_as_template
标记放入模板中,如下所示:
<p>My first paragraph.</p>
<p><a href="var1"><img src="var2"></a></p>
<p>My second paragraph.</p>
{% load render_as_template %}
{% render_as_template myobject.attribute %}
因此允许呈现myobject.attribute
中的任何模板标记。这就是我遇到麻烦的地方:
首先,我将我的帖子正文传递给render_as_template
asselected_post.body | truncatewords_html:“100”| safe
或asselected_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 %}
现在它工作得很好 我已经创建并注册了几个自定义标记。当模板不是我文章内容的一部分时,它们可以很好地与我的模板配合使用(例如,作为HTML从数据库中提取)。但是我的模板标签中有static。当我将_呈现为_模板内容时,我会得到无效的块标记:“static”。这方面有什么办法吗?