侧边栏筛选功能

设计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>
posted @ 2022-10-08 17:54  等日落  阅读(32)  评论(0编辑  收藏  举报