django--個人主頁建立練習
1.前端頁面采用模板繼承與動態模板
{% extends ‘base.html‘ %} {% block content %} {% for article in article_list %} <div class="media"> <div class="media-left media-middle"> <a href="#"> <img class="media-object" src="/media/{{ article.blog.userinfo.avatar }}"alt="..." width="64" height="64"> </a> </div> <div class="media-body"> <h4 class="media-heading"><a href="/{{ article.blog.userinfo.username }}/{{ article.nid }}">{{ article.title }}</a></h4> {{ article.desc }} <div style="margin-top: 10px " class="article_bottom"> <span><a href="/{{ article.blog.userinfo.username }}/">{{ article.blog.userinfo.username }}</a></span> <span>posted @ {{ article.create_time | date:‘Y-m-d H:i:s‘ }}</span> <span class="glyphicon glyphicon-comment"><a href="">-評論({{ article.commit_num }})</a></span> <span class="glyphicon glyphicon-thumbs-up"><a href="">-點贊({{ article.up_num }})</a></span> </div> </div> </div> <hr> {% endfor %} {% endblock %}
2.其中在個人頁面中要要有圖片及頭像顯示
在註冊時我們存入數據苦事存儲的頭像的信息只是我們的文件的名字信息:
因此圖片的文件將存在在我們的靜態文件avatar下,開始的默認的頭像為default中靜態文件中的默認圖片
在使用前端頁面需要頭像時需要在路由中為存放頭像的文件夾開一個路由,以及為存放圖片的文件夾配置靜態文件夾:
路由:
項目文件夾:
3.在個人頁面的展示中,後臺主要做的就是將前端需要展示的數據提供給他,用到的就是數據庫的查詢:
def user_blog(request, username, *args, **kwargs): user = models.UserInfo.objects.filter(username=username).first() if not user: return redirect(‘/error/‘) blog = user.blog article_list = user.blog.article_set.all() condition = kwargs.get(‘condition‘) param = kwargs.get(‘param‘) if ‘tag‘ == condition: article_list = article_list.filter(tag__pk=param) elif ‘category‘ == condition: article_list = article_list.filter(category__pk=param) elif ‘archive‘ == condition: archive_list = param.split(‘-‘) print(‘&&&&&&&&&&&&&&‘, archive_list) article_list = article_list.filter(create_time__year=archive_list[0], create_time__month=archive_list[1]) # tag_list = models.Tag.objects.all().filter(blog=blog).annotate(coun=Count(‘article__title‘)).values_list(‘title‘, coun) ‘coun‘) #主要運用分組查詢: # category_num = models.Category.objects.all().filter(blog=blog).annotate(coun=Count(‘article__title‘)).values_list( # ‘title‘, ‘coun‘) #下面這條很重要,用的是按日期歸檔,既哪一年的哪個月寫了哪些文章: # from django.db.models.functions import TruncMonth # y_m_num = models.Article.objects.all().filter(blog=blog).annotate(y_m=TruncMonth(‘create_time‘)).values(‘y_m‘).annotate(coun=Count(‘y_m‘)).values_list(‘y_m‘, ‘coun‘) # # print(blog) print(article_list) return render(request, ‘user_blog.html‘, locals())
3.主要是分組查詢的應用:
-查詢當前站點下每個分類的文章數
-總結:filter在前,表示where,values在前,表示group by,
value在後,表示取值,filter在後,表示havaing
-Category.objects.all().filter(blog=blog).annotate(cout=Count(article__title)).values_list(‘title‘,‘count‘)
-查詢當前站點下每個標簽的文章數
-Tag.objects.all().filter(blog=blog).annotate(cout=Count(article__title)).values_list(‘title‘,‘count‘)
-歸檔:查詢當前站點每年每月發表的文章數
-截斷函數
-from django.db.models.functions import TruncMonth -Article.objects.all().filter(blog=blog).annotate(y_m=TruncMonth(‘create_time‘)).values(‘y_m‘).annotate(cout=Count(y_m)).values_list(‘y_m‘,‘count‘)
4.動態模板的應用方法:
-inclosion_tag
-在app下創建一個模塊:名字必須叫:templatetags
-在模塊下創建一個py文件:my_tag.py(這個名字隨意)
-my_tag.py下,寫方法:
-from django.template import Library
register = Library() register名字不能變
@register.inclusion_tag(‘classify.html‘)
def classify(username):
eturn 字典
-使用:
在模板中:
-{%load my_tag%}
-{% classify 傳參%}
django--個人主頁建立練習