个人首页



一路由配置

 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)
                    
原文地址:https://www.cnblogs.com/wanghaohao/p/7892270.html