djang - 模板层

Django的设计模式及模板层

  • 传统MVC

    • M model 模型
    • V view 视图
    • C Controller 控制
  • Django 设计模式 MTV

    • M model 模型
    • V view视图
    • T Templates 模板
  • 模板配置

    • 创建模板文件夹<项目名>/templates

    • 在settings.py 中TEMPLATES配置项

      1. BCKEND:指定模板的引擎
      2. DIRS:模板的搜索目录(可以多个)
      3. APP_DIRS: 是否要在应用中templates文件夹中搜索模板文件
      4. OPTIONS: 有关模板的选项
    • 配置乡长,需要修改的部分

      • 设置DIRS ‘DIRS‘:[os.path.join(BASE_DIR,‘templates‘)],
    • 模板的加载方式

      • 通过loader获取模板,通过HttpResponse进行响应

        在视图函数中

        from  django.template import loader
        # 通过loader加载模板
        temp = loader.get_template("模板文件名称")
        # 通过temp转换成HTML字符串
        html= temp.render(字典数据)
        # 用响应对象将转换后的字符串内容返回给浏览器
        return HttpResponse(html)
        
    • 使用render()直接加载并相应模板

      • 在视图函数中

        from django.shortcuts import render
        return render(request,‘模板文件名‘,字典数据)
        
    • 视图层与模板层的交互

      • 视图函数中将Python 变量封装到字典中传递到模板

        def xxx_view(request)
        	dic = {
        		"变量1":"值1",
        		"变量2": "值2",
        	}
        	return render(request, ‘xxx.html‘, dic)
        
      • 在模板中可以使用 {{ 变量名 }} 的语法,调用视图函数传来的变量

模板层-变量和标签

  • 模板层-变量

  • 在模板中使用变量的语法

    • {{ 变量名 }}
    • {{ 变量名.index }}
    • {{ 变量名.key }}
    • {{ 对象.方法 }}
    • {{ 函数名 }}
  • 模板层-标签

    • 标签语法
    • {% 标签 %}
    • 。。。。
    • {% 结束标签 %}
  • if 标签

    {% if 条件表达式1 %}
    .。。
    {% elfi 条件表达式2 %}
    .。。
    {% endif %}
    
  • for 标签

    {% for 变量 in 可迭代对象 %}
    ...循环语句
    {% empty %}
     ...可迭代对象无数据是填充语句
     {% endfor %}
     
     
     #内置变量- froloop
     forloop.counter	循环的当前迭代(从1开始索引)
     forloop.conunter0   循环的当前迭代(从0 开始索引)
     forloop.revcounter   counter值得倒序
     forloop.revcounter0   revcounter值得倒序
     forloop.first        如果是第一次通过循环,则为真
     forloop.last         如果是最后一次通过循环,则为真
     forloop.parentloop   当前套循环,parentloop表示外层循环
    

模板层 过滤器和继承

  • 模板层过滤器
    • 在变量输出时对变量得值进行处理
    • 可以通过使用过滤器来改变变量的输出显示
    • 语法:{{变量 | 过滤器1:"参数值1" | 过滤器2:"参数值2" ...}}
    • 常用过滤器
      • lower 将字符串转换为全部小写
      • upper 将字符串转换为大写形式
      • safe 默认不对变量内地阿字符串进行html转义
      • add:‘n‘ 将value得值增加n
      • truncatechars:‘n‘ 如果字符串多余指定得字符串数量,那么会别截断,阶段得字符串将可以翻译得胜率好序列(”。。。。“)结尾。
  • 模板得继承
    • 模板继承可以使父模板中的内容宠用,子模版直接继承父模板得全部内容,并可以覆盖父模板中对用得块
    • 语法-父模板中
      • 定义父模板中得块block 标签
      • 标识出哪些在子模块中是允许被修改得
      • block标签: 在父模板中定义,可以在子模版中覆盖
    • 语法- 子模版中
      • 继承模板 extends标签(写在模板文件得第一行)
        • 例如{% extends ‘base.html‘ %}
      • 子模版,重写父模板中得内容块
        • {% block block_name %}
        • 子模版块覆盖父模板中block_name 块得内容
        • {% endblock block_name %}
      • 重写得覆盖规则
        • 不重写,将按照父模板得效果显示
        • 重写则按照重写效果显示
        • 注意:模板继承时,服务器得动态内容无法继承

djang - 模板层

上一篇:equals和==区别


下一篇:WPF 自定义ItemsControl/ListBox/ListView控件样式