使用上下文处理器访问所有模板中的最新博客条目
假设你的 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>