zoukankan      html  css  js  c++  java
  • django框架模板

    模板

      • 模板介绍
        • 模板
          • 目前市面上有非常多的模板系统,其中最知名最好用的就是DTL和Jinja2。DTL是Django Template Language三个单词的缩写,也就是Django自带的模板语言。当然也可以配置Django支持Jinja2等其他模板引擎,但是作为Django内置的模板语言,和Django可以达到无缝衔接而不会产生一些不兼容的情况。
        • DTL与普通的HTML文件的区别
          • DTL模板是一种带有特殊语法的HTML文件,这个HTML文件可以被Django编译,可以传递参数进去,实现数据动态化。在编译完成后,生成一个普通的HTML文件,然后发送给客户端。
        • 渲染模板
          • render_to_string
            • 找到模板,然后将模板编译后渲染成Python的字符串格式。最后再通过HttpResponse类包装成一个HttpResponse对象返回回去。
              from django.template.loader import render_to_string from django.http import HttpResponse def book_detail(request,book_id): html = render_to_string("detail.html") return HttpResponse(html)​
          • render
            • 将模板渲染成字符串和包装成HttpResponse对象一步到位完成。
              from django.shortcuts import render def book_list(request): return render(request,'list.html')
        • 模板查找路径配置
          在项目的settings.py文件中。有一个TEMPLATES配置,这个配置包含了模板引擎的配置,模板查找路径的配置,模板上下文的配置等。模板路径可以在两个地方配置。
          • DIRS
            • 这是一个列表,在这个列表中可以存放所有的模板路径,以后在视图中使用render或者render_to_string渲染模板的时候,会在这个列表的路径中查找模板。
          • APP_DIRS
            • 默认为True,这个设置为True后,会在INSTALLED_APPS的安装了的APP下的templates文件加中查找模板。
            • 优先级
              • DIRS>APP
              • 没有抛出一个TemplateDoesNotExist的异常。
      • 模板变量
        • 变量
          • 模板中可以包含变量,
            • Django在渲染模板的时候,可以传递变量对应的值过去进行替换。
            • 变量的命名规范和Python非常类似
              • 只能是阿拉伯数字和英文字符以及下划线的组合,不能出现标点符号等特殊字符。
            • 变量需要通过视图函数渲染,视图函数在使用render或者render_to_string的时候可以传递一个context的参数
              • 这个参数是一个字典类型。以后在模板中的变量就从这个字典中读取值的
                profile.html模板代码<p>{{ username }}</p># views.py代码def profile(request): return render(request,'profile.html',context={'username':'huangyong'})
          • 模板中的变量同样也支持点(.)的形式。
            不能通过中括号的形式访问字典和列表中的值,比如dict['key']和list[1]是不支持的!
            • 字典
              • 查找这个字典的username这个key对应的值。
            • 对象
              • 查找这个对象的username属性,或者是username这个方法。
            • .1
              • 一个列表或者元组或者任意的可以通过下标访问的对象,如果是的话就取这个列表的第1个值。
              • 如果不是就获取到的是一个空的字符串。
      • 模板标签
        • if
          • if相当于python中的if语句
          • 使用方法
            • {%if%}
            • {%else%}
            • {%endif%}
          • 判断运算符
            • ==、!=、<、<=、>、>=、in、not in、is、is not等
        • for
          • 相当于python中的for循环
          • 使用方法
            • {%for %}
            • {%endfor%}
            • 快捷键
              • for Tab
            • 如果要反向遍历在最后加reverrsed
          • DTL变量
            • forloop.counter
              • 当前循环的下标。以1作为起始值。
            • forloop.counter0
              • 当前循环的下标。以0作为起始值。
            • forloop.revcounter
              • 当前循环的反向下标值,以1作为最后一个元素的下标。
            • forloop.revcounter0
              • 当前循环的反向下标值,以0作为最后一个元素的下标。
            • forloop.first
              • 是否是第一次遍历。
            • forloop.last
              • 是否是最后一次遍历
        • empty
          • 在没有值得情况下
            • 返回empty后的提示语
        • with
          • 模板中定义变量
          • 使用方法
            • {% with lisi=persons.1 %} 或 {% with persons.1 as lisi %}
            • {% endwith %}
        • url
          • 模板中url写法
          • 使用方法
            • {% url 'name'%}
            • 传参
              • {% url 'name' xxx=1%}
      • 过滤器
        • 在模板中对数据进行处理使用
          • {{ value|filter_name:'str'}}
          • 不能有空格
        • 常用过滤器
          • add
            • 将值和参数转换成整形然后进行相加。
          • cut
            • 移除值中所有指定的字符串。
          • date
            • 将一个日期按照指定的格式,格式化成字符串。
            • 时间格式化格式
              • Y
                • 四位数字的年份
              • m
                • 两位数字的月份
              • n
                • 月份,1-9前面没有0前缀
              • d
                • 两位数字的天
              • j
                • 天,但是1-9前面没有0前缀
              • g
                • 小时,12小时格式的,1-9前面没有0前缀
              • h
                • 小时,12小时格式的,1-9前面有0前缀
              • G
                • 小时,24小时格式的,1-9前面没有0前缀
              • H
                • 小时,24小时格式的,1-9前面有0前缀
              • i
                • 分钟,1-9前面有0前缀
              • s
                • 秒,1-9前面有0前缀
          • default
            • 如果值被评估为False。
              • 使用default过滤器提供的默认值。
          • default_if_none
            • 如果值是None
              • 使用default_if_none提供的默认值。
              • 只有这个值是等于None的时候才会使用默认值。
          • first
            • 返回列表/元组/字符串中的第一个元素。
          • last
            • 返回列表/元组/字符串中的最后一个元素。
          • floatformat
            • 使用四舍五入的方式格式化一个浮点类型。
              • 如果没有传递参数
                • 在小数点后保留一个小数
              • 如果传递参数
                • 就保留几位
          • join
            • 将列表/元组/字符串用指定的字符进行拼接
          • length
            • 获取一个列表/元组/字符串/字典的长度
          • lower
            • 将值中所有的字符全部转换成小写
          • upper
            • 将值中所有的字符全部转换成大写
          • random
            • 在被给的列表/字符串/元组中随机的选择一个值
          • safe
            • 标记一个字符串是安全的。也即会关掉这个字符串的自动转义
          • slice
            • 切片操作
          • striptags
            • 删除字符串中所有的html标签
          • truncatechars
            • 对字符串进行切割,并且会拼接三个点来作为省略号
      • 自定义过滤器
        • 步骤
          • 在项目目录下创一个文件夹
            • templatetags 固定的名称
          • 在templatetags目录下建一个py文件用于写代码
            • 导入模块
              • from django.template import Library-
            • 定义过滤器函数
            • 将过滤器函数注册进去django项目
          • 导入过滤器的py文件
            • {%load filters_name%}
          • 使用方法与过滤器使用方法一致
      • 模板结构优化
        • 引入模板
          • 有些代码在许多模板中都用的到,我们把这些代码抽取出来,进行引入,避免重复。
          • include
            • {% include '模板名' %}
            • 默认include标签包含模版,会自动的使用主模版中的上下文,也即可以自动的使用主模版中的变量。如果想传入一些其他的参数,那么可以使用with语句。
        • 模板继承
          • 模版继承类似于Python中的类,在父类中可以先定义好一些变量和方法,然后在子类中实现。
            • 模版继承也可以在父模版中先定义好一些子模版需要用到的代码,然后子模版直接继承就可以了。并且因为子模版肯定有自己的不同代码,因此可以在父模版中定义一个block接口,然后子模版再去实现。
          • {% extends "模板名" %}
            • extends标签必须放在模版的第一行。
          • block接口
            • 子模版中的代码必须放在block中
            • {{block.super}}
              • 在某个block中需要使用父模版的内容,那么可以使用{{block.super}}来继承。
            • {% block xxx %} {% endblock xxx %}
      • 加载静态文件
        • css样式文件,js执行文件和图片在DTL中加载。
          • 使用static标签
        • 加载静态文件步骤
          • 首先确保django.contrib.staticfiles已经添加到settings.INSTALLED_APPS中。
          • 确保在settings.py中设置了STATIC_URL。
          • 在已经安装了的app下创建一个文件夹叫做static。
          • 如果有一些静态文件是不和任何app挂钩的。那么可以在settings.py中添加STATICFILES_DIRS。
            • STATICFILES_DIRS = [ os.path.join(BASE_DIR,"static") ]
          • 在模版中使用load标签加载static标签。
            • {% load static %}
            • {% static '文件路径' %}
          • 不在模板中使用load标签调用,在settings中添加builtins"
            • 在settings.py中的TEMPLATES/OPTIONS
            • 添加'builtins':['django.templatetags.static']
        • 手动将静态文件的url与静态文件的路径进行映射
          • from django.conf import settings
            • from . import settings
          • from django.conf.urls.static import static
          • urlpatterns = [ # 其他的url映射 ] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

    你的无畏来源于你的无知!

  • 相关阅读:
    Codeforces Round #260 (Div. 1) A
    cdoj 1131 男神的礼物 区间dp
    bzoj2435: [Noi2011]道路修建 树上dp
    hdu 4597 Play Game 区间dp
    cdoj 31 饭卡(card) 01背包
    hdu5256 序列变换 dp LIS
    BZOJ 4027: [HEOI2015]兔子与樱花 树上dp
    Codeforces Round #202 (Div. 1) D. Turtles dp
    hdu 4114 Disney's FastPass 状压dp
    Python help() 函数
  • 原文地址:https://www.cnblogs.com/YiwenGG/p/12914939.html
Copyright © 2011-2022 走看看