templates模板语法传值


templates模板语法传值

  • {{ }}:变量相关

  • {% %}:逻辑相关

render支持给两种html文件传值的方式。
python所有的基本数据类型,函数名,类型,对象都可以被传到html上。
针对函数名和类名,模板语法会自动加括号调用(但是不支持传递额外的参数)

模板语法统一采用局点符 . 方式获取容器类型中的数据
.key
.index
.key.index.index.key

前端:

{% for user_obj in user_queryset %}
                        
                            {{ user_obj.id }}
                            {{ user_obj.username }}
                            {{ user_obj.password }}
                            {{ user_obj.password }}
                        
                            编辑
                            删除
                        
                        
                    {% endfor %}

后端:

def index(request):
    # 模版语法可以传递的后端python数据类型
    n = 123
    f = 11.11
    s = '我也想奔现'
    b = True
    l = ['小红', '姗姗', '花花', '茹茹']
    t = (111, 222, 333, 444)
    d = {
        'username': 'jason',
        'age': 18,
        'info': '这个人有点意思',
        'hobby':[1,2,3,{'info':'junjie'}]
    }
    se = {'晶晶', '洋洋', '嘤嘤'}

    def func():
        print('我被执行了')
        return '你的另一半在等你'

    class MyClass(object):
        def get_self(self):
            return 'self'

        @staticmethod # 转为普通函数
        def get_func():
            return 'func'

        @classmethod # 绑定给类的方法
        def get_class(cls):
            return 'cls'

        """
        对象被展示到html页面上 
        就类似于执行了打印操作也会触发
        __str__方法
        """
        def __str__(self):
            return '到底会不会?'

    obj = MyClass()

    # return render(request,'index.html',{})  # 一个个传
    return render(request, 'index.html', locals())

前端:


{{ n }}

{{ f }}

{{ s }}

{{ b }}

{{ l }}

{{ d }}

{{ t }}

{{ se }}

传递函数名会自动加括号调用 但是模版语法不支持给函数传额外的参数:{{ func }}

传类名的时候也会自动加括号调用(实例化){{ MyClass }}

内部能够自动判断出当前的变量名是否可以加括号调用 如果可以就会自动执行 针对的是函数名和类名

{{ obj }}

{{ obj.get_self }}

{{ obj.get_func }}

{{ obj.get_class }}

{{ d.username }}

{{ l.0 }}

{{ d.hobby.3.info }}