simple_tag与inclusion_tag的使用

simple_tag与inclusion_tag的使用
simple_tag与fifter的使用:我们可以自定义函数提供给前端使用
在项目的app下创建一个templatetags的文件夹
创建一个py文件(simple_tag_text.py)
导入相应的模块,并自定义函数
from django import template
register = template.Library()


@register.simple_tag
def sum_test(x, y):

    return x+y
然后就可以在前端引用该函数
{% load simple_tag_text %}
{% sum_test 参数一 参数二 %}
fifter与simple_tag使用方式基本一样但是最多传入2个参数,并且传入方式不一样	{{参数一|sum_test:参数二}},但是fifter可以用于{{if for 等情况}},而simple_tag不行

inclusion_tag的使用:在我们平时,如果一个操作在多个页面中使用我们可以把该功能写入inclusion_tag中,然后让该功能作用用于模板中,其他先用该功能的就可以直接继承模板
在项目的app下创建一个templatetags的文件夹
创建一个py文件(project.py 这里我们用来实现后台的导航条)
导入相应的模块,并自定义函数
@register.inclusion_tag('inclusion/manage_menu_list.html')
def manage_menu_list(request):
    data_list = [
        {'title': '概览', 'url': reverse("dashboard", kwargs={'project_id': request.tracer.project.id})},
        {'title': '问题', 'url': reverse("issues", kwargs={'project_id': request.tracer.project.id})},
        {'title': '统计', 'url': reverse("statistics", kwargs={'project_id': request.tracer.project.id})},
        {'title': 'wiki', 'url': reverse("wiki", kwargs={'project_id': request.tracer.project.id})},
        {'title': '文件', 'url': reverse("file", kwargs={'project_id': request.tracer.project.id})},
        {'title': '配置', 'url': reverse("setting", kwargs={'project_id': request.tracer.project.id})},
    ]

    for item in data_list:

        if request.path_info.startswith(item['url']):
            """如果发起请求的url是data_list中的某个url,就将这个url变成选中状态"""
            item['class'] = 'active'

    return {'data_list': data_list}
然后在inclusion/manage_menu_list.html中获取数据
{% for item in data_list %}
    <li {% if item.class %} class="{{ item.class }}" {% endif %} ><a href="{{ item.url }}">{{ item.title }}</a></li>
{% endfor %}
如果我们想用导航条就继承manage_menu_list.html就行
{% extends 'layout/manage.html' %}
posted @ 2021-01-22 13:51  大魔头的取经故事  阅读(171)  评论(0编辑  收藏  举报