个人站点渲染和跳转过滤功能

news/2024/7/1 17:47:25

核心逻辑:在url里加入正则,匹配分类、标签、年月日和其后面的参数,在视图函数接收这些参数,然后进行过滤。

 

urls.py

# 个人站点的跳转
re_path(r'^(?P<username>\w+)/(?P<condition>tag|category|archive)/(?P<param>.*)/$', views.home_site),# 个人站点
re_path(r'^(?P<username>\w+)/$', views.home_site, name='home_site'),

 

home_site.py

def home_site(request, username, **kwargs):"""个人站点视图函数:param request::return:"""user = UserInfo.objects.filter(username=username).first()# 判断用户是否存在if not user:return render(request, 'not_found.html')article_list = models.Article.objects.filter(user=user)if kwargs:condition = kwargs.get('condition')param = kwargs.get('param')if condition == 'category':article_list = article_list.filter(category__title=param)elif condition == 'tag':article_list = article_list.filter(tags__title=param)else:year, month = param.split('-')article_list = article_list.filter(created_time__year=year, created_time__month=month)# 查询当前站点blog = user.blog# 获取当前用户或者当前站点对应的所有文章# 查询当前站点的每一个分类名称以及对应的文章数category_list = models.Category.objects.filter(blog=blog).values('pk').annotate(count=Count('article__title')).values_list('title', 'count')# 查询当前站点的每一个标签名称以及对应的文章数tag_list = models.Tag.objects.filter(blog=blog).values('pk').annotate(count=Count('article')).values_list('title', 'count')# 查询当前站点的每一个年月名称以及对应的文章数date_list = models.Article.objects.filter(user=user).annotate(month=TruncMonth('created_time')).values_list('month').annotate(count=Count('nid')).values_list('month', 'count')context = {'username': username,'user': user,'blog': blog,'article_list': article_list,'category_list': category_list,'tag_list': tag_list,'date_list': date_list,}return render(request, 'home_site.html', context=context)

 

home_site.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>{{ request.user.username }}的个人主页</title><link rel="stylesheet" href="/static/blog/css/home_site.css"><link rel="stylesheet" href="/static/blog/bs/css/bootstrap.min.css">
</head>
<body><div class="header"><div class="header_content"><p class="title"><span>{{ blog.title }}</span><a href="" class="backend">管理</a></p></div>
</div><div class="container main_content"><div class="row"><div class="col-md-3"><div class="panel panel-warning"><div class="panel-heading">我的标签</div><div class="panel-body">{% for tag in tag_list %}<p><a href="/{{ username }}/tag/{{ tag.0 }}">{{ tag.0 }}({{ tag.1 }})</a></p>{% endfor %}</div></div><div class="panel panel-danger"><div class="panel-heading">随笔分类</div><div class="panel-body">{% for category in category_list %}<p><a href="/{{ username }}/category/{{ category.0 }}">{{ category.0 }}({{ category.1 }})</a></p>{% endfor %}</div></div><div class="panel panel-success"><div class="panel-heading">随笔归档</div><div class="panel-body">{% for date in date_list %}<p><a href="/{{ username }}/archive/{{ date.0 | date:'Y-m' }} ">{{ date.0 | date:'Y-m' }}({{ date.1 }})</a></p>{% endfor %}</div></div></div><div class="col-md-9"><div class="article_list">{% for article in article_list %}<div class="article_item clearfix"><h5><a href="">{{ article.title }}</a></h5><div class="article_desc">{{ article.desc }}</div><div class="small pub_info pull-right"><span>发布于{{ article.created_time | date:'Y-m-d H:i' }}</span><span class="glyphicon glyphicon-comment"></span>评论{{ article.comment_count }}<span class="glyphicon glyphicon-thumbs-up"></span>点赞{{ article.up_count }}</div></div><hr>{% endfor %}</div></div></div>
</div>
</body>
</html>

 

转载于:https://www.cnblogs.com/lshedward/p/10390716.html


http://lihuaxi.xjx100.cn/news/236215.html

相关文章

Socketserver 笔记

引入Socketserver的背景&#xff1a;我们之前使用socket编程的时候&#xff0c;Server端创建一个连接循环&#xff08;建立连接&#xff09;一个通信循环&#xff08;基于一次连接建立通信循环&#xff09;&#xff0c;&#xff08;这里的黏包问题我们的实现方式是&#xff1a;…

jdbc链接数据库

JDBC简介 JDBC全称为&#xff1a;Java Data Base Connectivity (java数据库连接&#xff09;&#xff0c;可以为多种数据库提供填统一的访问。JDBC是sun开发的一套数据库访问编程接口&#xff0c;是一种SQL级的API。它是由java语言编写完成&#xff0c;所以具有很好的跨平台特性…

计算机应用基础电子演示文稿系统行考作业,最新电大计算机应用基础形考PowerPoint答案...

.;.. 计算机应用基础/ ? 课程考核/ ? 模块4 PowerPoint 2010 电子演示文稿系统——客观题一&#xff0e;单项选择题1. 在PoewrPoint 中&#xff0c;“视图”这个名词表示( D )。A. 一张正在修改的幻灯片B. 一种图形C. 编辑演示文稿的方式D. 显示幻灯片的方式2. 在下列PowerPo…

m_Orchestrate learning system---七、如何快速学好前端

m_Orchestrate learning system---七、如何快速学好前端 一、总结 一句话总结&#xff1a;看视频啊&#xff0c;系统看视频啊 1、如何解决单词数字太长超出边界的问题&#xff1f; word-wrap 把编辑删除都挤跑了 2、amaze ui中a标签和button标签可以互换么&#xff1f; 其实弄上…

计算机组装与维护计划,计算机组装与维护实习计划.ppt

计算机组装与维护实习计划一、课程实训目的通过实训,使学生进一步了解微型计算机的结构和组成,理解和掌握基本工作原理,掌握软硬件的安装过程及安装过程中的故障处理,加强维护和维修的动手能力,提高学生分析问题和解决问题的能力。计算机组装与维护实习计划一、课程实训目的通过…

【Quartz】实现接口封装化(二)

原文:【Quartz】实现接口封装化&#xff08;二&#xff09;前言 通过昨天的努力终于算是了解Quartz这个定时器的简单使用&#xff0c;为了更深一步的了解和基于以后希望在项目中能使用他。所有我对他做了一下简单的封装操作&#xff0c;便于以后从新建立新工作和触发器&#…

可构造样式表 - 通过javascript来生成css的新方式

可构造样式表是一种使用Shadow DOM进行创建和分发可重用样式的新方法。 使用Javascript来创建样式表是可能的。然而&#xff0c;这个过程在历史上一直是使用document.createElement(style)来创建<style>元素&#xff0c;然后通过访问其sheet属性来获得一个基础的CSSStyle…

上交2017计算机专业就业,上海交通大学计算机科学与工程系(CSE)

经过多轮的意向调整&#xff0c;最终确定的生产实习去向结果公示(请见附件)。原则上&#xff0c;经公示后结果不做调整。生产实习执行时间从7月24日到8月27日&#xff0c;请目前尚未就课题开展明细跟导师联系的同学在7月24日之前务必联系导师。一、实习报告要求1、从教务网站&a…