zoukankan      html  css  js  c++  java
  • 个人首页



    一路由配置

     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)
                        
  • 相关阅读:
    mysql prepare语句使用
    mysql 存储过程中的declare 和 set @的两种变量的区别
    Redis命令总结
    系统架构师
    php 大数组的POST问题解决
    ubuntu设置系统时间与网络时间同步
    JAVA开发者最常去的20个英文网站
    文件上传之一句话木马原理及制作
    Postman怎么进行参数化
    单元测试、接口测试、功能测试的区别
  • 原文地址:https://www.cnblogs.com/wanghaohao/p/7892270.html
Copyright © 2011-2022 走看看