inclusion_tag 界面的嵌套 和渲染

时间:2023-11-15 23:08:29

后端的html渲染到前端:

如果后端直接定义的是html标签,传到前端的时候因为浏览器的安全机制就会直接渲染成字符串如果想要渲染成需要的标签,就需要在后端用make_save()进行包裹,或者直接在前端的要渲染的标签后面加上 | safe

首先我们要用Library进行界面的交互渲染 就需要放在特定的文件夹内

这个文件夹必须叫:templatetags

当你的逻辑部分和前端界面交互的时候可能会出现嵌套的部分:

Library

from django.template import Library
from django.conf import settings register = Library() @register.inclusion_tag("rbac/menu.html") # 这个装饰器式先加载这个html界面然后再去下面拿到数据进行渲染这个界面
def menu(request):

也就是你需要用到library来尽心设置一个装饰器 这个装饰器会让你的后端逻辑和前端的代码进行交互

渲染

因为有浏览器的保护策略 你的后端html标签无法显示需要 |safe 或者后端 的mark_safe

Library 生成的实例对象一共可以有三种方式:

inclusion_tag和filter还有另一种(我忘了2333):

from django.template import Library

register = Library()  #生成实例

@register.inclusion_tag('rbac/menu.html')   # 这个装饰器式先加载这个html界面然后再去下面拿到数据进行渲染这个界面
def menu(request):
pass @register.filter() #这个是过滤 你所提交的信息在前端界面筛选的时候可以使用|进行条件的判断 def has_permission(request,name):
pass

eg:

  

@register.inclusion_tag('rbac/menu.html')
def menu(request):
"""
生成菜单
:param request:
:return:
"""
# 获取到所有的一级菜单列表
menu_list = request.session.get(settings.MENU_KEY) # 为默认选中的URL设置active
# for item in menu_list:
# reg = "^%s$" % item['url']
# if re.match(reg,request.path_info):
# item['class'] = 'active'
return {'menu_list':menu_list}