Python 在Django中自定义模板标记,以过滤博客中的特色文章
我从这篇文章中得到了一个暗示 我已经创建了模板标记,但我不知道如何在html中使用它。我有一个home.html,我想在这里显示三篇特色文章。我正在寻找类似{u post%}的内容,然后显示帖子的详细信息 另外,我是否需要像上面的文章一样创建一个featured_posts.html,因为我不想为这个featured post创建任何额外的页面。我只是想让他们在我的主页上添加其他东西 我要做的是创建了一个模板标记,如下所示Python 在Django中自定义模板标记,以过滤博客中的特色文章,python,django,python-3.x,django-templates,django-template-filters,Python,Django,Python 3.x,Django Templates,Django Template Filters,我从这篇文章中得到了一个暗示 我已经创建了模板标记,但我不知道如何在html中使用它。我有一个home.html,我想在这里显示三篇特色文章。我正在寻找类似{u post%}的内容,然后显示帖子的详细信息 另外,我是否需要像上面的文章一样创建一个featured_posts.html,因为我不想为这个featured post创建任何额外的页面。我只是想让他们在我的主页上添加其他东西 我要做的是创建了一个模板标记,如下所示 from django import template regis
from django import template
register = template.Library()
@register.inclusion_tag('featured_posts.html')
def featured_posts(count=3):
if Post.is_featured:
featured_posts = Post.published.order_by('-publish')[:count]
return {'featured_posts': featured_posts}
我在这里面临的问题是我无法从模型导入Post模型。我的目录结构有点像这样:-
我有一个名为posts的应用程序。
里面有models.py和templatetags模块,模板标签里面有blog_tags.py
我不能做相对的导入
然后创建了一个新页面,其特色是_posts.html,如下所示:
<ul>
{% for post in featured_posts %}
<li>{{ post.title }} </li>
{% endfor %}
</ul>
home.html
给你的标签打电话。就这样
或
注意,
featured_posts
这里不是上下文中的post列表(在中为
循环迭代),而是函数名:def featured_posts(count=3)
。它们在您的代码中具有相同的名称,这可能会让您有点困惑。这就是inclusion标记的实现方式。正如给定的链接所描述的:函数、模板,然后在父/主模板中调用您的函数。{%for%}循环将在您的辅助模板中。我是新手,我刚刚编辑了我的问题,关于我如何尝试这样做。你能告诉我怎么做吗?你在标签功能上的错误与链接中的OP相同。请看下面的答案特色帖子。html`很好。哦,是的。。。我已经改正了。我在我的home.html{%load blog_tags%}{%for post in featured_posts%}{{post.title}}{%endfor%}
仍然没有在我的home.html中得到任何东西。我提到的一个可能的原因是我没有在标记中包含model类。(阅读上面我在做这件事时面临的问题)@IvanStarostin
from posts.models import Post
{% load blog_tags %}
{% featured_posts %}
{% featured_posts count=15 %}