杂顶
自定义标签:
在{% %}里可以用变量,用过滤器,不能用自定义标签(@register.simple_tag),{{ }}
request作为过滤器参数传递时,request只在页面跳转时传递参数 传递完成之后就失效(也许只有第一次有效果),所以每次刷新页面都会给一个新的request对象,一般传递数值时,需要放在数据库里,用request.session
在中间件内可以直接添加属性(request.xxxx),然后在使用是直接调用reqeuest.xxxx
from django.template import Library register=Library() @register.filter def func(arg1): return 返回值 # 使用 1,一个参数的情况: {{ 模板变量|func}} # 模板变量作为func函数的第一个参数 最终的返回值替换双花括号 # 使用 2,两个参数的情况: {{模板变量|func:参数2}} # 接收两个参数 最终返回值替代双花括号 # view传递 def xxoo(request): s1 = '李帅和家宝' l1 = [11,22,33,44,55] return render(request,'xxoo.html',{'s1':s1,'l1':l1}) # 自定义标签 from django import template register = template.Library() #register固定的名字,注册器 # @register.filter # def oo(v1,v2): #不带参数的过滤器 # s = v1 + 'xxoo' # return s @register.filter def oo(v1,v2): #带参数的过滤器 s = v1 + v2 return s @register.simple_tag def mytag(v1,v2,v3): s = v1 + '和B哥' + v2 + v3 return s @register.inclusion_tag('inclusiontag.html') def func(v1): return {'oo':v1} # 调用 {% load xx %} {{ s1|oo }} {{ s1|oo:'幸福的生活在一起' }} #print: 李帅和家宝幸福的生活在一起 {% mytag s1 '和相玺' '和大壮' %} #print: 李帅和家宝和B哥和相玺和大壮 {% func l1 %} #11 22 33 44 55 # 标签小应用 @register.simple_tag def reverse_url(request): if request.path == reverse('customers'): return '客户信息展示' else: return '我的客户信息' # 前端调用 {% load mytags %} {% reverse_url request %}
Django中META设置排序
class Meta: ordering = ['id', ] # -id 查询出的数剧为倒序排列 verbose_name = '客户信息表' verbose_name_plural = '客户信息表'
Django中间件设置登陆认证白名单、request类添加属性
from django.utils.deprecation import MiddlewareMixin from django.shortcuts import redirect, reverse from sales import models class UserAuth(MiddlewareMixin): def process_request(self, request): white_list = [reverse('login'), reverse('register')] if request.path in white_list: return user_id = request.session.get('user_id') if user_id: user_obj = models.UserInfo.objects.filter(id=user_id).first() # 将当前登陆用户对象作为一个属性,封装给了request request.user_obj = user_obj return else: return redirect('login') # 设置 MIDDLEWARE = [ '...' 'sales.utils.mymiddleware.UserAuth', ] # view里调用 user_obj = request.user_obj # HTML里调用 {{ request.user_obj.username }}