目录
一、运行环境
Python3.5+Django2.0+Xadmin2.0
二、基本标签
1.常用模板标签
参考链接:https://blog.csdn.net/qq_41577208/article/details/89309737
2.常用过滤器
参考链接:https://blog.csdn.net/a599174211/article/details/82751693
三、自定义标签
1.第一种
1.1创建app,并在settings中添加到INSTALLED_APPS中
1.2创建tags.py文件,位置如下图
1.3添加tags的具体效果
# -*- coding: utf-8 -*-
# @File : like_tags.py
# @Date : 2021-08-11
# @Author : admin
from django import template
from django.contrib.contenttypes.models import ContentType
from ..models import LikeCount
register= template.Library()# 用于注册
#将这个方法注册为simple_tag
@register.simple_tag
def get_like_count(obj):#传入obj这个对象,这个对象可以是任意类型。这里我们现在使用的是blog类型
content_type = ContentType.objects.get_for_model(obj)
like_count, created = LikeCount.objects.get_or_create(content_type=content_type, object_id=obj.pk)
return like_count.liked_num
#获取模板标签的模板变量
@register.simple_tag(takes_context=True)
def get_like_status(context,obj):
content_type = ContentType.objects.get_for_model(obj)
user = context['user']
if not user.is_authenticated:
return ''
if LikeCount.objects.filter(content_type=content_type,object_id=obj.pk,user=user).exist():
return 'active'
else:
return ''
#获取obj的content_type并返回
@register.simple_tag
def get_content_type(obj):
content_type = ContentType.objects.get_for_model(obj)
return content_type.model
1.4前端引用
{% extends 'content_base.html' %}
{% load static %}
{% load like_tags %}
<h6 class="mb-1" id="dianzan" onclick="likechange(this,{% get_content_type detail_question %},{{ detail_question.pk }})">
<span class="fa fa-thumbs-o-up"></span>
<span class="fa fa-thumbs-o-up">点赞</span>
<i class="fa fa-thumbs-up" id="ic_dianzan"></i>点赞
</h6>
2.第二种
2.1创建app并在settings中注册,添加到INSTALLED_APPS中(与第一种一样)
2.2创建tag.py文件,我这里是data_to_base.py,如下图
from .models import Article_types,Article_management
#全局上下文,向网站导航条传数据
def data_to_base(request):
Type_list = Article_types.objects.all()
Article = Article_management.objects.all()
newid = Type_list.get(two_level='新闻中心').id
new_Type_list = Type_list.filter(one_level=newid).all()
base_content = {}
#业务服务
base_content['Navigation_services'] = Article.filter(state='yes').filter(two_level='业务服务').order_by('upload_time')
#行业案例
base_content['Navigation_case'] = Article.filter(state='yes').filter(two_level='行业案例').order_by('upload_time')
#新闻中心
base_content['Navigation_news'] = new_Type_list
#关于我们
base_content['Navigation_about'] = Article.filter(state='yes').filter(two_level='关于我们').order_by('upload_time')
return base_content
2.3在settings的template中引入tags.py的位置
2.4前端引入
这个前端不需要引入,直接用