使用上下文处理器访问所有模板中的最新博客条目

假设你的 models.py 文件中定义了一个名为 Post 的模型,其中包含博客文章,并且有一个 date_published 字段。

第 1 步:编写上下文处理器

在 app 目录中创建(或添加)名为 context_processors.py 的文件:

from myapp.models import Post

def recent_blog_posts(request):
    return {'recent_posts':Post.objects.order_by('-date_published')[0:3],}  # Can change numbers for more/fewer posts

第 2 步:将上下文处理器添加到你的设置文件中

确保将新的上下文处理器添加到 TEMPLATES 变量中的 settings.py 文件中:

TEMPLATES = [
    {
        ...
        'OPTIONS': {
            'context_processors': [
                ...
                'myapp.context_processors.recent_blog_posts',
            ],
        },
    },
]

(在 1.9 之前的 Django 版本中,这是使用 TEMPLATE_CONTEXT_PROCESSORS 变量直接在 settings.py 中设置的。)

第 3 步:在模板中使用上下文处理器

无需再通过个人观点传递最近的博客条目! 只需在任何模板中使用 recent_blog_posts 即可。

例如,在 home.html 中,你可以创建一个侧栏,其中包含指向最近帖子的链接:

<div class="blog_post_sidebar">
    {% for post in recent_blog_posts %}
        <div class="post">
            <a href="{{post.get_absolute_url}}">{{post.title}}</a>
        </div>
    {% endfor %}
</div>

或者在 blog.html 中,你可以创建每个帖子的更详细的显示:

<div class="content">
    {% for post in recent_blog_posts %}
        <div class="post_detail">
            <h2>{{post.title}}</h2>
            <p>Published on {{post.date_published}}</p>
            <p class="author">Written by: {{post.author}}</p>
            <p><a href="{{post.get_absolute_url}}">Permalink</a></p>
            <p class="post_body">{{post.body}}</p>
        </div>
    {% endfor %}
</div>