设计url
我们可以观察博客园关于日期、标签、分类的url设计是如下的:
https://www.cnblogs.com/suncolor/category/2226294.html 分类url
https://www.cnblogs.com/suncolor/archive/2022/10.html 日期url
https://www.cnblogs.com/suncolor/tag/2022/10.html 标签url
域名/用户名/category、tag、archive/。。
re_path(r'^(?P<username>\w+)/(?P<condition>category|tag|archive)/(?P<param>.*)/$',views.site),
视图函数的设计
在个人站点页需要添加的地方是:
#传入一个**kwargs,用于获取除username之外剩下的参数
def site(request,username,**kwargs):
# 判断kwargs有没有值,没有则正常展示article_list里所有的文章
# 有则进行判断,对article_list进行进一步的渲染
if kwargs:
print(kwargs)
condition = kwargs.get('condition')
param = kwargs.get('param')
if condition == 'category':
article_list = article_list.filter(category_id=param)
elif condition == 'tag':
article_list = article_list.filter(tag__id=param)
else:
year,month = param.split('-')
article_list = article_list.filter(create_time__year=year,create_time__month=month)
前端页面对应设计
与个人站点一样,主要是对应url的添加
<p><a href="/{{ user_obj.username }}/category/{{ category.2 }}/">{{ category.0 }}({{ category.1 }})</a></p>
<p><a href="/{{ user_obj.username }}/tag/{{ tag.2 }}">{{ tag.0 }}({{ tag.1 }})</a></p>
<p><a href="/{{ user_obj.username }}/archive/{{ data.month|date:'Y-m' }}">{{ data.month|date:'Y年m月' }}({{ data.count_num }})</a></p>
标签:功能,url,list,侧边,tag,param,kwargs,article,筛选
From: https://www.cnblogs.com/suncolor/p/16769751.html