使用上下文處理器訪問所有模板中的最新部落格條目

假設你的 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>