• Django-Template


    模板
    在django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具
    模板的设计方式实现了我们MTV中的VT解耦,VT有着N:M的关系,一个V可以调用任意T,一个T可以供任意V使用。
    模板处理分为两个过程:加载和渲染
    temp = loader.get_template('index.html')
    content = temp.render()
    return HttpResponse(centent)
    以前都是这样写的
    但是现在有了Django 自带的渲染器可以直接
    return render(request,'index.html')
    但其实render这个返回的也是一样的

    模板主要有两个部分
    HTML静态代码
    动态插入的代码段(挖坑,填坑)
    模板中的动态代码段除了做出基本的静态填充,还可以实现一些基本的运算,转换和逻辑
    模板中的变量:视图传递给模板的数据;遵守标识符规则;语法{{var}};如果变量不存在,则插入空字符串

    模板中的点语法:
    grades grade
    字典查询 调用K的方式
    属性或者方法 grade.gname
    索引 grades.0.gname
    模板中的小弊端,调用对象的方法,不能传参数
    模板中的标签
    语法:{% tag %}
    作用:1.加载外部传入的变量 2.在输出中创建文本 3.控制循环或者逻辑

    {% for student in students %}
    <li>{{ student.s_name }}</li>
    {% endfor %}

    {% for student in students %} 属性或者方法
    <li>{{ student.get_studentname }}</li>
    {% endfor %}

    <h3>{{ students.0.s_name }}</h3> 索引

    <h3>{{ student_dict.hobby }}</h3> 字典查询 调用K的方式
    ----------------------------------------------------------------
    上面的代码
    def get_students(request):
    student = Student.objects.all()

    student_dict = {
    'hobby':'base',
    'foood':'chik',
    }
    data = {
    'students': student,
    'student_dict':student_dict
    }
    return render(request, 'student_list.html', context=data)
    --------------------------------------------------------------------

    for
    {%for变量in列表%}
    语句1
    {%empty%}
    语句2
    {%end%}

    当列表为空或者不存在的时候,执行empty之后的语句
    {{forloop.counter}}表示当前是第几次循环,从1数数
    {{forloop.counter0}}表示当前是第几次循环,从0数数
    {{forloop.revcounter}}表示当前是第几次循环,倒着数数,到1停
    {{forloop.revcounter0}}表示当前是第几次循环,倒着数数,到0停
    {{forloop.first}}是否第一个是布尔值
    {{forloop.last}}是否最后一个是布尔值

    注释
    单行注释
    {#被注释掉的内容#}
    多行注释
    {%comment%}
    内容
    {%endcomment%}
    乘除
    {%widthratio 数 分母 分子%}
    整除 可以用于单双行不同颜色
    {% if num | divisibltby:2 %]
    ifequal 如果相等
    {% ifequal value1 value2%}
    语句
    {%endifequal%
    ifnotequal 如果不相等

    url:反向解析
    {%url'namespace:name' p1 p2%}
    csrf_token 用于跨站请求伪造保护的
    格式{%csrf_token%}


    过滤器:{{var|过滤器}}
    作用:在变量显示修改之前
    加法: {{p.page|add:5}}
    减法:{{p.page|add:-5}}
    小写:{{p.page|lower}}
    大写:{{p.page|upper}}
    可以传递参数,参数需要使用引号引起来
    比如join:
    {{student|join'='}}
    默认值default 格式:{{var|default value}}
    如果变量没有被提供或者是空的,会使用默认值
    根据制定格式转换日期为字符串,处理时间的
    就是针对data进行日期转换
    {{dateVal|date:'y-m-d'}}

    HTML转义
    将接收到的数据当成普通字符串处理还是当成html代码进行处理来渲染的一个问题
    这个就是在views中写了html语言,不会渲染的情况下
    渲染成一个html:{{code|safa}}
    {%autoscape off%}
    code
    {%endautoscape%}

    不想渲染
    {%autoescape%}
    code
    {%endautoescape%}

    模板继承
    模板也可以继承
    关键字block:挖坑
    {%block XXX%}
    code
    {%endblock%}
    extends 继承,写在开头位置
    {%extends'父类模板路径'%}
    include:加载模板进行渲染
    格式{%include'模板文件'%}
    python最完美的就是继承
    当作网页的时候 可以把它分开。头部 内容 等等

    结构标签
    block:

    用来规划我们的布局(挖坑)
    首次出现表示规划
    第二次出现表示填充以前的规划
    第三次出现表示填充以前的规划,默认动作是覆盖
    如果不想覆盖可以添加{{block.super}}
    这样就实现了增量式操作
    extends
    继承
    可以获取父模板中的所有结构
    include
    包含
    可以将页面作为一个模块嵌入到其他页面中
    一般会受用include+block去使用
    三个标签可以混合使用,能用block+extends可以完成的,尽量用这两个完成,因为inculde的加载速度偏慢


    css的格式:
    1.在setting里面修改:
    STATIC_URL = '/static/'
    STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static')
    ]
    2.在父模板里面加入一个坑:
    {% block ext_css %}

    {% endblock %}
    3.在要的页面里面填坑:
    {% block ext_css %}
    {# <link rel="stylesheet" href="/static/css/home.css">#}
    <link rel="stylesheet" href="{% static 'css/home.css' %}">
    {% endblock %}


    静态资源:
    动静分离
    创建静态文件夹
    在settings中注册STATICFILES_DIRS=[]
    在模板中使用
    先加载静态资源{%load static%}
    使用{%static 'xxx'%}xxx是相对路径
    坑点:
    仅能在开发者模式下使用
    以后需要自己单独处理
  • 相关阅读:
    汇总遇到的问题
    mybatis下载地址
    快速创建数据大绝招
    常见的dos命令
    添加react-native-icons中文傻瓜式教程
    react native配置环境watchman监控安装失败解决办法
    如何使用SwitchyOmega.crx谷歌插件
    Git与Github学习笔记
    HTTP协议详解
    使用npm安装一些包失败了的解决方法(npm国内镜像介绍),安装速度跟cnpm一样哦
  • 原文地址:https://www.cnblogs.com/SmartCat994/p/12306965.html
Copyright © 2020-2023  润新知