在Django中自定义模板标签以过滤博客中的featured_posts

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Django中自定义模板标签以过滤博客中的featured_posts相关的知识,希望对你有一定的参考价值。

我已经从这篇文章Customising tags in Django to filter posts in Post model中得到了一些暗示

我已经创建了模板标签,但我不确定如何在我的html中使用它。我有一个home.html,我想要显示三个特色帖子。我正在寻找类似{%for post in featured_post%}的内容,然后显示帖子详细信息。

此外,我是否一定需要像上面的帖子一样创建一个featured_posts.html,因为我不想要特色帖子的任何额外页面。我只是希望他们在我的主页上添加其他东西。

我想要做的是我已经创建了一个模板标签

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

我不能做相对导入。

然后创建一个新页面featured_posts.html,如下: -

<ul>
    {% for post in featured_posts %}
        <li>{{ post.title }} </li>
    {% endfor %}
</ul>

现在,我想在home.html中使用它。我怎么用呢?

编辑: - 如上所述,我可以加载模型如下: -

from posts.models import Post
答案

home.html

{% load blog_tags %} 
{% featured_posts %}

打电话给你的标签而已。

要么

{% featured_posts count=15 %}

注意,这里的featured_posts不是来自上下文的帖子列表(在for循环中迭代),而是函数名称:def featured_posts(count=3)。它们在您的代码中具有相同的名称,可能这让您感到困惑。

以上是关于在Django中自定义模板标签以过滤博客中的featured_posts的主要内容,如果未能解决你的问题,请参考以下文章

django中自定义标签和过滤器

django搭建个人博客

Django中自定义过滤器的使用

Django自定义模板标签和过滤器

Django之模板层-自定义过滤器以及标签

如何在 Django 中自定义单选按钮