gpt4 book ai didi

python - Django Blog Archive--显示包含帖子的年月列表

转载 作者:行者123 更新时间:2023-11-28 20:59:31 24 4
gpt4 key购买 nike

考虑到 Django 是为新闻站点构建的,我正在尝试做一些我认为相对简单的事情。只想在我的博客的侧边栏上获得按年/月计数分组的存档列表。有点像

2018
-Mar(3)
-Feb (2)
-Jan (6)

我在这里做了很多搜索,但似乎已经有一段时间没有人想做这样的事情了,其他一切都已经过时了。

我已经能够弄清楚如何创建每月存档 url/view/tempate 并可以通过转到 blog/2018/03 显示一个月的帖子这是我博客的观点

class BlogListView(generic.ListView):
model = Post
context_object_name = 'post_list'
queryset = Post.objects.all()
template_name = 'post_list.html'

class ArticleMonthArchiveView(MonthArchiveView):
queryset = Post.objects.all()
date_field = "posted"
allow_future = True

def blog_post(request, slug):
blog_post = Post.objects.get(slug=slug)
context = {'blog_post': blog_post}
return render(request, 'blog/blog_post.html', context)

和我的 url(请暂时忽略 url 和路径的混合——正在努力!)

urlpatterns = [
url(r'^$', BlogListView.as_view(), name='blog'),
url(r'^(?P<slug>[\w-]+)/$', blog_post, name='blog_post'),
path('<int:year>/<int:month>/',
ArticleMonthArchiveView.as_view(month_format='%m'),
name="post_archive_month"),
]

我想我需要为我的所有 View 创建另一个上下文字段才能执行此操作吗?但我真的不知道从哪里开始。我知道我显然可以手动创建月份列表并循环尝试查看帖子是否匹配,但我无法想象这是最有效的方法。

有人有我可能在这里遗漏的相当明显的解决方案吗?

最佳答案

我就是这样做的。对于您要实现的目标来说,它可能看起来过于复杂。但这提供了很多控制权。

您想在您的博客应用程序中添加一个“context_processor”以使帖子列表在所有页面上可用。

项目/博客/context_processors.py

from .models import Post

def posts(request):
return {
'all_posts': Post.objects.order_by('posted'),
}

在 TEMPLATES -> OPTIONS -> context_processors 的 settings.py 中添加这个

TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
# ...
],
'APP_DIRS': True,
'OPTIONS': {
'debug':True,
'context_processors': [
'django.contrib.auth.context_processors.auth',
# ....
'django.contrib.messages.context_processors.messages',
'project.blog.context_processors.posts', ### ADDED LINE
],
},
},
]

将此添加到基本模板的侧边栏基础.html

<div id='site__side'>
...
{% regroup all_posts by posted.year as year_list %}

<ul>
{% for year in year_list %}
<li>{{ year.grouper }}
{% regroup year.list by posted.month as month_list %}
<ul>
{% for month in month_list %}
<li><a href="{% url 'blog:post_archive_month' year.grouper month.grouper %}">{{ month.list.0.posted|date:'b' }} ({{ month.list|length }})</a></li>
{% endfor %}
</ul>
</li>
{% endfor %}
</ul>
...
</div>

{{ month.list.0.posted|date:'b' }} 以 3 个字母的文本格式显示月份

编辑:{{ month.list|length }} 用于计数

关于python - Django Blog Archive--显示包含帖子的年月列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49440657/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com