个人首页
一路由配置
1点击首页中的头像和发布人,跳转到个人博客首页中。
2
3头像,发布人都渲染在<a>标签中。
4
5路由分发:以......开头,就映入到某个应用下的urls中进行匹配。
6
7 url(r'^app01/', include('app01.urls')),
8
9 url(r'^app01/', include('app01.urls')),
10
11 给a标签一个url,点击走url进行路由匹配,匹配成功走所对应的视图函数。
12 url(r'^(?P<username>.*)', views.homeSite,name="wh"),
13 <a>标签:点击发布人发送一个url:以app01/开头,引入到app01下的urls中,当前点击的用户名。进行路由匹配。
14 "/app01/{{ article.user.username }}"
15 点击头像通过别名,反向解析找到别名是...的url,替换
16 视图函数中也可以用反向解析,原理相同,导入removes,传参数要用args。
17 {% url 'aaa' article.user.username %}
18 urls:有名分组,按关键字传参,接收当前点击的用户名,返回到所对应的视图函数中,加别名,用于反向解析
19 url(r'^(?P<username>.*)', views.homeSite,name="aaa"),
20 视图函数:接收kwargs键值对,和当前用户名查询当前用户名是点击的用户名,的用户信息对象,判断用户信息,如果不是返回错误信息。
21 返回个人博客页面,返回用户信息。
22 查询:通过个人用户信息查询到个人个人站点(个人博客)
二:HTML页面
*注意:自己写的css样式是静态文件,在前端渲染页面时存在缓存问题 1 左侧分类归档部分 (1)用户个人信息 渲染头像 当前用户头像的url <p><img src="{{current_user.avatar.url}}" alt=""></p> 渲染昵称 <p>{{current_user.username}}</p> 渲染电话 <p>{{ current_user.tel }}</p> 渲染标签 <p>{{ current_user.email }}</p> (2)分类归档 for直接基于对象取文章分类 方法一:{% for classfication in current_user.blog.classfication_set.all %} <p>{{ classfication }}({{ classfication.article_set.count }})</p> {% endfor %} 方法二:{% for classfication in classfication_list %} <p><a href="/my_blog/{{ current_user.username }}/classfication/{{ classfication.0 }}">{{ classfication.0 }}({{ category.1 }})</a></p> {% endfor %} for循环标签归档 {% for tag in tag_list %} <p><a href="/my_blog/{{ current_user.username }}/tag/{{ tag.0 }}">{{ tag.0 }}({{ tag.1 }})</a></p> {% endfor %} (4)日期归档 for循环日期归档 {% for date in date_list %} <p><a href="/my_blog/{{ current_user.username }}/date/{{ date.0 }}">{{ date.0 }}({{ date.1 }})</a></p> {% endfor %} 2 右侧主内容 for循环渲染文章标题,文章内容,具体信息 {% for article in article_list %} <div class="article_title"><a>{{article.title}}</a></div> <div class="article.summary"><p>{{article.summary}}</p></div> <div class="info"> 发布于:<span>{{ article.create_time|date:"Y-m-d" }} <span>评论{{ article.comment_count }} <span>点赞{{ article.poll_count }} <span>阅读{{ article.read_count }}</span> </div> {% endfor %}
三:在后台取文章部分(views)视图函数中
def homeSite(request,username): #查询当前用户 current_user=models.UserInfo.objects.filter(username=username).first() #取当前站点对象 current_blog=current_user.blog #判断是否有该用户,没有,返回报错页面 if not current_user: return render(request,'notFound.html') 有,查询当前用户的所有文章 # article_list=models.Articles.objects.filter(user_username=username) article_list=models.Articles.objects.filter(user=current_user) #查询当前用户的分类归档(基于双下划线实现) #ret=models.Classfication.objects.values_list("title") 分类名字 #聚合分组函数 from django.db.models import Count,Sum #反向查询用表名,正向查询用字段 #ret=models.Classfication.objects.filter(blog=current_blog).annotate(count=Count("article__nid")).values_list("title","count") classfication_list=models.Classfication.objects.all().filter(blog=current_blog).annotate(c= Count("article__nid").values_list("title","c") # 查询当前用户的标签归档 models.Tag tag_list=models.Tag.objects.all().filter(blog=current_blog).annotate(c=Count("article__nid")).values_list("title","c") print(tag_list) # <QuerySet [('基础知识', 3), ('插件框架', 0), ('web开发', 1)]> # 查询当前用户的日期归档 date_list=models.Article.objects.filter(user=current_user).extra(select={"filter_create_date":"strftime('%%Y/%%m',create_time)"}).values_list("filter_create_date").annotate(Count("nid")) print(date_list)