zoukankan      html  css  js  c++  java
  • Django框架 之 模板语言

    浏览目录

    一、标签 Tags

    1、普通变量

    • 普通变量用{{ }}
    • 变量名由数字、字母、下划线组成
    • 点.在模板语言中用来获取对象相应的属性值

    示例:

    {# 取variable中的第一个参数 #}
    {{ variable.0 }}
    {# 取字典dic中key的值 #}
    {{ dic.key }}
    {# 取obj_list对象列表中第一个对象的attr属性值 #}
    {{ obj_list.0.attr }}
    {# 点操作只能调用不带参数的方法 #}
    {{ obj_list.0.method }}  

    2、逻辑判断

    逻辑判断用{% %}

    for

    • 语法:{% for item in item_list %}...{% empty %}...{% endfor %}
    • 作用:循环item_list,如果item值为空或不存在,则会执行empty中的代码,切记要写endfor结束循环
    • 常用for循环参数:

    Variable Description
    forloop.counter 当前循环的索引值(从1开始)
    forloop.counter0 当前循环的索引值(从0开始
    forloop.revcounter 当前循环的倒序索引值(从1开始)
    forloop.revcounter0 当前循环的倒序索引值(从0开始)
    forloop.first 当前循环是不是第一次循环(布尔值)
    forloop.last 当前循环是不是最后一次循环(布尔值)
    forloop.parentloop 本层循环的外层循环

    if

    • 语法:
      {% if some_condition %}...{% elif other_condition %}...{% endif %}
    • 作用:条件判断,切记要写endif结束条件判断
    • 常用与if语句结合的判断关键字 
      {% if some_condition %}...{% elif other_condition %}...{% endif %}
      

    with

    • 语法
    {% with new_variable = old_variable %}.....{% endwith %}
    • 作用:定义中间变量

    csrf_token

    • 语法:在页面的每个form表单中写上

    {% csrf_token %}
    • 作用:用于跨站请求伪造保护

    注释

    语法:

    {# 注释内容 #}

    3、母板系统

    继承

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="x-ua-compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1">
      <title>Title</title>
      {% block page-css %}
      
      {% endblock %}
    </head>
    <body>
    
    <h1>这是母板的标题</h1>
    
    {% block page-main %}
    
    {% endblock %}
    <h1>母板底部内容</h1>
    {% block page-js %}
    
    {% endblock %}
    </body>
    </html>
    • 语法
    {% extends 'base.html' %}
    • 作用:在子页面中在页面最上方使用上面的语法来继承母板

    块block

    • 语法
    {% block block_name %}...{% endblock %}
    • 作用:在子页面中通过定义母板中的block名来对应替换母板中相应的内容

    示例:

    {% block page-main %}
      <p>世情薄</p>
      <p>人情恶</p>
      <p>雨送黄昏花易落</p>
    {% endblock %}

    组件

    • 语法
    {% include 'subassembly.html' %} 
    • 作用:可以将常用的固定的HTML内容保存在单独的文件中,在需要的地方用以上语法导入使用

    4、静态文件相关

    在Settings中设置static静态文件夹,在html中导入。

    语法:

    {% load static %}  

    例如:

    {% load static %}
    <img src="{% static "images/hi.jpg" %}" alt="Hi!" />
    

    引用JS文件时使用:

    {% load static %}
    <script src="{% static "mytest.js" %}"></script>
    

    某个文件多处被用到可以存为一个变量  

    {% load static %}
    {% static "images/hi.jpg" as myphoto %}
    <img src="{{ myphoto }}"></img>

    使用get_static_prefix

    {% load static %}
    <img src="{% get_static_prefix %}images/hi.jpg" alt="Hi!" />  

    或者

    {% load static %}
    {% get_static_prefix as STATIC_PREFIX %}
    
    <img src="{{ STATIC_PREFIX }}images/hi.jpg" alt="Hi!" />
    <img src="{{ STATIC_PREFIX }}images/hi2.jpg" alt="Hello!" />  

    5、自定义simple_tag

    • 作用:可以自定义标签,注册后可使用
    • 自定义simple_tag的步骤(与自定义Filter类似,不过接收更灵活的参数)

      • 在项目的app中创建名为templatetags的文件夹
      • 在templatetags的文件夹中创建自定义的py文件,例如:custom_simpletag.py
      • custom_simpletag.py中编写自定义simple_tag,例如:

    from django import template
    register = template.Library()
    
    @register.simple_tag(name="my_simpletag")
    def add_simpletag(a,b,c): # 可接收多个参数
    return "{} + {} + {}".format(a, b, c)
    
      • 使用自定义simple_tag前,首先在HTML页面中导入py文件 
    {% load custom_simpletag %}
    {% my_simpletag "1" "2" "3" %} 

    6、自定义inclusion_tag

    • 作用:返回html代码片段
    • 自定义inclusion_tag的步骤

      • 在项目的app中创建名为templatetags的文件夹
      • 在templatetags的文件夹中创建自定义的py文件,例如:custom_inclusiontag.py
      • custom_inclusiontag.py中编写自定义inclusiontag,例如:

    from django import template
    register = template.Library()
    
    @register.inclusion_tag('inclusion_tag.html')
    def my_inclusiontag(n):
    n = 1 if n < 1 else int(n)
    data = ["第{}项".format(i) for i in range(1, n+1)]
    return {"data": data}
    
      • 在templates文件夹中创建刚才注册的inclusion_tag.html文件
    <ul>
      {% for choice in data %}
      <li>{{ choice }}</li>
      {% endfor %}
    </ul>
    
      • 使用自定义my_inclusiontag前,首先在HTML页面中导入py文件 
    {% load custom_inclusiontag %}
    {% my_inclusiontag 10 %}

    二、过滤器 Filter

    1、内置过滤器

    语法:

    {{ value|filter_name:args }}
    

    注意:管道符前后没有空格  

    default

    • 语法:
    {{ value: default: "自定义内容"}}  
    • 作用:如果value值没传的话就显示自定义内容

    length

    • 语法:
    {{ value|length }} 
    • 作用:返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

    filesizeformat

    • 语法:
    {{ value|filesizeformat }}  
    • 作用:将value格式化为一个 “人类可读的” 文件大小格式

    如果 value 是 123456789,输出将会是 117.7 MB。

    slice

    • 语法:
    {{value|slice:"start:end"}} 
    • 作用:切片

    date

    • 语法:
    {{ value|date:"Y-m-d H: i:s"}}  
    • 作用:将时间格式的value进行自定义格式化

    safe

    • 语法:
    {{value|safe}} 
    • 作用:取消Django对HTML标签和JS等语法标签进行自动转义,认为插入的HTML或JS是安全的不必转义

    truncatechars

    • 语法:
    {{ value|truncatechars:num}}  
    • 作用:如果字符串字符多于指定的字符数量,那么会被截断。截断的字符串将以可翻译的省略号序列(“…”)结尾。num参数是指截断的字符数

    2、自定义过滤器

     步骤

    • 在项目的app中创建名为templatetags的文件夹
    • 在templatetags的文件夹中创建自定义的py文件,例如:custom_filter.py
    • 在custom_filter.py中编写自定义过滤器,例如:

    from django import template
    register = template.Library()
    
    @register.filter(name="my_filter")
    def my_filter(value, arg): #最多接收两个参数
    return value.replace(arg, "")
    
    • 使用自定义filter前,首先在HTML页面中导入py文件 
    {% load custom_filter %}
    {{ variable|my_filter:"0" }}
    

      

     

  • 相关阅读:
    android 自定义动画4 RotateAnimation源码分析
    Android 绘图 阴影制作(Shadow)
    view, surfaceView, invalidate, postInvalidate, 刷新屏幕
    android database 常用字段描述
    Android标题栏进度指示器使用
    ThumbnailUtils Android2.2新增类
    Android 重力感应 测试代码
    Android中内嵌字体实现个性化
    Android中悬浮窗口
    Android布局Java代码构造法
  • 原文地址:https://www.cnblogs.com/gaoya666/p/8673371.html
Copyright © 2011-2022 走看看