在開發過程中,像側邊欄這種功能的版塊,我們在很多頁面都需要使用到的時候,我們則需要在視圖函數中書寫重覆的代碼,這樣很繁瑣,我們可以將側邊欄製成inclusion_tag,後面我們需要用到側邊欄功能時,只需要導入即可! 將側邊欄製成inclusion_tag的步驟: 1.在應用下創建一個名字必須叫te ...
在開發過程中,像側邊欄這種功能的版塊,我們在很多頁面都需要使用到的時候,我們則需要在視圖函數中書寫重覆的代碼,這樣很繁瑣,我們可以將側邊欄製成inclusion_tag,後面我們需要用到側邊欄功能時,只需要導入即可!
將側邊欄製成inclusion_tag的步驟:
1.在應用下創建一個名字必須叫templatetags的文件夾
2.在該文件夾內,創建一個任意名稱的py文件
3.在該py文件內,固定寫以下兩行代碼:
from django import template
register = template.Library()
自製inclusion_tag文件代碼
from django import template
from app01 import models
from django.db.models import Count
from django.db.models.functions import TruncMonth
register = template.Library()
# 自定義inclusion_tag
@register.inclusion_tag('left_menu.html') # 裡面放一個側邊欄的html文件
def left_menu(username): # username是調用時需要傳入的參數
# 構造側邊欄需要的數據
user_obj = models.UserInfo.objects.filter(username=username).first()
blog = user_obj.blog
# 查出個人站點的分類和分類數
category_list = models.Category.objects.filter(blog=blog).annotate(count_num=Count('article')).values('name',
'count_num',
'pk')
# print(category_list)
# 查出個人站點的標簽和標簽數
tag_list = models.Tag.objects.filter(blog=blog).annotate(num=Count('article')).values('name', 'num', 'pk')
# 按照年月統計所有文章
date_list = models.Article.objects.filter(blog=blog).annotate(month=TruncMonth('create_time')).values(
'month').annotate(num=Count('id')).values_list('month', 'num')
# print(date_list)
return locals() # 最後需要locals一下
前端頁面代碼
{% load mytag %} # 載入自製的inclusion_tag文件
{% left_menu username %} # 載入inclusion_tag函數並傳入需要的參數