Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在Django中从数据库呈现自定义模板标记_Python_Django_Django Templates - Fatal编程技术网

Python 在Django中从数据库呈现自定义模板标记

Python 在Django中从数据库呈现自定义模板标记,python,django,django-templates,Python,Django,Django Templates,我是Django的新手,正在尝试为我的网站构建一个博客应用程序。我创建了一个模型来存储博客文章,其中包括一个用于文章正文的文本字段,使用TinyMCE(通过Grapelli)创建并转换为HTML。我想在此文章正文中嵌入自定义模板标记,这些标记作为模板标记保存在数据库中,但在我的网站上被请求时会呈现为HTML。到目前为止,我没有任何运气让标签正确呈现。如何让Django在我的帖子中正确解释和呈现模板标记?当直接在模板中加载和实现自定义标记时,它工作得很好,正是这种间接加载给我带来了麻烦。我试过(编

我是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
as
selected_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 %}

现在它工作得很好

我已经创建并注册了几个自定义标记。当模板不是我文章内容的一部分时,它们可以很好地与我的模板配合使用(例如,作为HTML从数据库中提取)。但是我的模板标签中有static。当我将_呈现为_模板内容时,我会得到无效的块标记:“static”。这方面有什么办法吗?