Django模板标签——基本标签+过滤器+自定义标签

目录

一、运行环境

二、基本标签

1.常用模板标签

2.常用过滤器

三、自定义标签

1.第一种

2.第二种


一、运行环境

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前端引入

这个前端不需要引入,直接用

猜你喜欢

转载自blog.csdn.net/qq_15028721/article/details/119604165