文章詳情頁--佈局中header和左邊區域不變--用到繼承css
home_site和article_detail只是佈局 中心區域 只是右側不一樣-----用到繼承原理html
--------git
urlajax
# 文章詳情頁 re_path('(?P<username>\w)/(?P<article_id>\d+)$',views.article_detail),
def get_query_data(username): user_obj = models.UserInfo.objects.filter(username=username).first() blog = user_obj.blog cate_list = models.Category.objects.filter(blog=blog).values('pk').annotate(c=Count('article__title')).values_list( 'title', 'c') tag_list = models.Tag.objects.filter(blog=blog).values('pk').annotate(count=Count('article')).values_list('title', 'count') date_list = models.Article.objects.filter(user=user_obj).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') return {"blog": blog, "cate_list": cate_list, "date_list": date_list, "tag_list": tag_list}
自定義標籤和過濾器--解決複用問題數據庫
templates(模板層)django
在項目文件下新建json
my_tags.py瀏覽器
from django import template register=template.Library() @register.simple_tag() def multi_tag(x,y): return x*y
運行:ide
自定義標籤和過濾器--解決複用問題函數
my_tags.py:
from django import template from blog import models from django.db.models import Avg, Max, Min, Sum, Count # 自定義標籤和過濾器--解決複用問題 register=template.Library() @register.simple_tag() def multi_tag(x,y): return x*y @register.inclusion_tag('classification.html') def get_classification_style(username): user_obj = models.UserInfo.objects.filter(username=username).first() blog = user_obj.blog cate_list = models.Category.objects.filter(blog=blog).values('pk').annotate(c=Count('article__title')).values_list( 'title', 'c') tag_list = models.Tag.objects.filter(blog=blog).values('pk').annotate(count=Count('article')).values_list('title', 'count') date_list = models.Article.objects.filter(user=user_obj).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') return {"blog": blog, "cate_list": cate_list, "date_list": date_list, "tag_list": tag_list}
base.html中的col-md-3的內容
<div class="panel panel-warning"> <div class="panel-heading">個人標籤</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">隨筆分類</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">隨筆歸檔</div> <div class="panel-body"> {% for date in date_list %} <p><a href="/{{ username }}/archive/{{ date.0 }}">{{ date.0 }}({{ date.1 }})</a></p> {% endfor %} </div> </div>
---
safe 告訴瀏覽器不要作轉義
在後臺保存的是html代碼
執行後正常顯示:
方式一
{# 在base引入home_site 和 article_datail的樣式#} <link rel="stylesheet" href="/static/blog/css/article_detail.css"> <link rel="stylesheet" href="/static/blog/css/home_site.css">
方式二:採用繼承的方式:
-
不須要引入圖片
$('#div_digg .action').click(function () { var is_up=$(this).hasClass('diggit'); alert(is_up) })
url
# 點贊 path('digg/',views.digg),
$('#div_digg .action').click(function () { var is_up=$(this).hasClass('diggit'); {#alert(is_up)#} $.ajax({ url:'/digg/', type:'post', data:{'csrfmiddlewaretoken':$("[name='csrfmiddlewaretoken']").val(), 'is_up':is_up,'article_id':{{article_obj.pk}} }, success:function (data) { console.log(data) } })
views.py
import json def digg(request): print(request.POST) article_id=request.POST.get('article_id') # is_up=request.POST.get('is_up') # 字符串 is_up=json.loads(request.POST.get('is_up')) # 字符串 user_id=request.user.pk ard=models.ArticleUpDown.objects.create(user_id=user_id,article_id=article_id,is_up=is_up) return HttpResponse('ok')
點擊一下點贊--數據庫中存入數據
success:function (data) { console.log(data); if (data.state){ if(is_up){ var val=parseInt($('#digg_count').text()); $('#digg_count').text(val+1) } else { var val=parseInt($('#bury_count').text()); $('#bury_count').text(val+1) } } else { if (data.handled){ $('#digg_tips').html('您已經推薦過了') } else { $('#digg_tips').html('您已經反對過了') } setTimeout(function () { $('#digg_tips').html('') },1000) } }
代碼優化
$("#div_digg .action").click(function () { var is_up = $(this).hasClass("diggit"); $obj = $(this).children("span"); $.ajax({ url: "/digg/", type: "post", data: { "csrfmiddlewaretoken": $("[name='csrfmiddlewaretoken']").val(), "is_up": is_up, "article_id": "{{ article_obj.pk }}", }, success: function (data) { console.log(data); if (data.state) { var val = parseInt($obj.text()); $obj.text(val + 1); } else { var val = data.handled ? "您已經推薦過!" : "您已經反對過!"; $("#digg_tips").html(val); setTimeout(function () { $("#digg_tips").html("") }, 1000) } } }) })
複用問題:採用構建函數的的方法解決--採用inclution_tag ,顯示成功但
點擊分類的連接出現問題
樣式引用問題,放在
靜態文件static的一級目錄下引入成功