核心该要
- setting.py 设置
USE_TZ = False
过滤month不好用时改为False(Mysql才会出现)
日期归档
查询 内置TruncMonth模块
- date_format的使用将时间格式化为想要的格式
- extra 注入sql语句,用
原生sql语句
- boot删格系统的练习
- 个人站点自页面
路由url的优化
**kwargs
setting时区设定
TIME_ZONE = 'Asia/Shanghai'
USE_TZ = False
URL路由
re_path('^(?P<username>\w+)$', views.home_site),
'''每个用户站点不用单独配url只需录制处访问路径即可'''
re_path('^(?P<username>\w+)/(?P<condition>tag|category|archive)/(?P<param>.*)/$', views.home_site),
视图views
若可能有多个参数时用**kwargs
内置年月归档模块
from django.db.models.functions import TruncMonth
locals()
传递本视图所有参数给html
def home_site(request, username, **kwargs):
user = UserInfo.objects.filter(username=username).first()
if not user:
return render(request, 'not_found.html')
blog = user.blog
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(create_time__year=year, create_time__month=month)
cate_list = models.Category.objects.filter(blog=blog).annotate(c=Count('article')).values_list('title', 'c')
tag_list = models.Tag.objects.filter(blog=blog).annotate(c=Count('article')).values_list('title', 'c')
time_list = models.Article.objects.filter(user=user).extra(select={"y_m_date": "date_format(create_time,'%%Y-%%m')"}).values('y_m_date').annotate(c=Count('nid')).values_list('y_m_date', 'c')
from django.db.models.functions import TruncMonth
return render(request, 'home_site.html', locals())
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
* {
margin: 0;
padding: 0;
}
.header {
width: 100%;
height: 60px;
background-color: #2e6da4;
}
.header .title {
font-size: 18px;
font-weight: 100;
line-height: 60px;
color: white;
margin-left: 50px;
}
.backend {
float: right;
color: white;
text-decoration: none;
font-size: 19px;
margin-right: 30px;
}
.pub_info {
color: gray;
margin-top: 10px;
float: right;
}
</style>
<link rel="stylesheet" href="/static/blog/bs/css/bootstrap.css">
</head>
<body>
<div class="header">
<div class="content">
<p class="title">
<span>{{ blog }}</span>
<a href="" class="backend">管理</a>
</p>
</div>
</div>
<div class="container">
<div class="row">
<div class="col-md-3">
<div class="panel panel-warning">
<div class="panel-heading">
<h3 class="panel-title">我的标签</h3>
</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">
<h3 class="panel-title">随笔分类</h3>
</div>
<div class="panel-body">
{% for cate in cate_list %}
<p><a href="/{{ username }}/category/{{ cate.0 }}">{{ cate.0 }}({{ cate.1 }})</a></p>
{% endfor %}
</div>
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-title">时间归档</h3>
</div>
<div class="panel-body">
{% for time in time_list %}
<p><a href="/{{ username }}/archive/{{ time.0 }}">{{ time.0 }}({{ time.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">
<span class="media-right">
{{ article.desc }}
</span>
</div>
<div class="small pub_info">
<span>发布于 {{ article.create_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 }})
<span class="glyphicon glyphicon-thumbs-down"></span>踩({{ article.down_count }})
</div>
</div>
<hr>
{% endfor %}
</div>
</div>
</div>
</div>
</body>
</html>