在侧边栏中创建“最近的帖子”列表。

2024-04-24 04:59:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在Django开发一个简单的博客应用程序,我很难弄清楚如何在侧边栏中动态生成最近的五篇文章。我的每个视图都是基于类的,它们扩展了一个通用模板,每个视图映射到一个模板,我相信这是正确的方法。我一直在寻找一种使用模板标签的方法,但是Django似乎不喜欢你在模板中加入任何逻辑。你知道吗

我认为问题是,我希望这个存在于我的生活中基本.html因为我想把最近的帖子显示在整个网站上,所以一个视图应该映射到你的网站吗基本.html或者这会引起问题,我对这个很陌生。我不知道如何处理这个问题,我是否应该为这个问题创建一个新的视图基本.html或者我是否应该使用我的模板标签,或者我是否应该扩展一个现有的视图(但是如果我这样做,它将不会是站点范围的?)。你知道吗

我基本上想要以下内容(它们是按时间倒序排列的)

{% for post in post_list[:4] %}
<a href="{{ post.get_absolute_url }}"> {{ post.title }} </a>
{% endfor %}

Tags: django方法视图模板应用程序站点网站html
1条回答
网友
1楼 · 发布于 2024-04-24 04:59:50

你可以使用模板标签。更具体地说,inclusion tag是您所需要的。这允许您通过一个小视图(如一段代码)在模板中的任何位置插入呈现的代码段。你知道吗

例如,在blog应用程序中创建templatetags/blog_tags.py文件(在应用程序中创建templatetags文件夹很重要;Django默认情况下在此处搜索这些文件夹),并添加以下内容:

from django import template
register = template.Library() 

@register.inclusion_tag('blog/snippets/recent_posts.html')
def render_recent_blogposts():
    return {
        # This is just an example query, your actual models may vary
        'post_list': BlogPost.objects.all().order_by("published_on")[:4]
    }

现在创建一个blog/snippets/recent_posts.html模板(它可以在任何地方,只要它符合上面的@register.inclusion_tag(...)):

<ul>
    {% for post in post_list %}
        <li><a href="{{ post.get_absolute_url }}"> {{ post.title }}</a></li>
        ...
    {% endfor %}
</ul>

最后,在原始模板中,现在可以呈现模板标记:

<aside>
    {% load blog_tags %}
    {% render_recent_blogposts %}
</aside>

相关问题 更多 >