杂顶

自定义标签:

在{% %}里可以用变量,用过滤器,不能用自定义标签(@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 }}

 

posted @ 2021-03-03 06:39  笑而不语心自闲  阅读(48)  评论(0编辑  收藏  举报