zoukankan      html  css  js  c++  java
  • django 模版语言

    模板标签

    内置标签

    文件大小

    文件大小:{{ file_size|filesizeformat }}

    切片

    <p>切片:{{ name_list|slice:"1:-1" }}</p>
    <p>切片:{{ name_dict.name3|slice:"1:-1" }}</p>

    时间

    <p>时间格式化:{{ now|date:"Y-m-d H:i:s" }}</p>

    a标签

    <p>a标签:{{ a_html|safe }}</p>

    js标签(添加后js不被执行)

    <p>script标签:</p>
    {{ script_html }}

    文本裁剪

    <p>大段的文本:{{ p_str|truncatechars:20 }}</p>

    循环


    <p>for循环</p>
    <ul>
    {% for name in name_list %}
    {% if forloop.last %}
    <li style="color: red;">{{ forloop.revcounter }}-{{ name }}</li>
    {% else %}
    <li {% if forloop.first %}style="background-color: yellow;" {% endif %}>{{ forloop.revcounter }}-{{ name }}</li>
    {% endif %}
    {% endfor %}
    </ul>
    #双层循环
    <p>双层循环</p>
    {% for name in name_list2 %}
    {% for name1 in name %}
    {{ forloop.parentloop.counter }}
    {{ forloop.counter }}
    {{ name1 }}
    {% endfor %}
    {% endfor %}
    while
    <p>with语句</p>
    {{ name_list }}

    {% with name %}
    {{ name }}
    {% endwith %}

    for in 循环
    <ol>
    {% for name in name_list %}
    <li>{{ name }}</li>
    {% endfor %}

    </ol>

    为空

    {% for i in name_list %}
    {{ i }}
    {% empty %}
    空空如也
    {% endfor %}

    判断

    {% if p3 %}
        <p>p3:{{ p3 }}</p>
    {% elif p2 %}
        <p>p2:{{ p2 }}</p>
    {% else %}
        <p>什么人都没有!</p>
    {% endif %}
    
    <hr>
    #判断列表长度
    {% if name_list|length >= 3 %}
        <p>需要打两辆车</p>
    {% else %}
        <p>一辆足矣!</p>
    {% endif %}

    {% if a > b %}
    {% endif %}

    {% if a > b %}
    {% else %}
    {% endif %}

    {% if a > b %}
    {% elif %}
    {% else %}
    {% endif %}

    标签注释

    {# 注释的内容 #}

    长度

    {{ name|length }}

    默认值

    {{ bucunzai|default:"这个变量并没有传值,使用的是默认值" }} 

    指定索引显示

    {{ name_list }}
    {{ name_list.0 }}
    {{ name_list.1 }}
    {{ name_list.2 }}

    对象属性

    {{ p1 }}
    {{ p1.name }}
    {{ p1.age }}
    {{ p1.run }}

    自定义

    最多接收两个参数

    示例(字体增加背景色)

    1.app01下创建包templatetags

    2.创建myfilter.py

    from django import template
    register = template.Library()
    
    
    # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫bl
    @register.filter(name="bl")
    def add_bl(arg):
        return '<span style="color:red;">{}</span>'.format(arg)
    
    
    # 告诉Django的模板语言我现在有一个自定义的filter方法,名字叫addstr
    @register.filter(name="addstr")
    def add_str(arg, arg2):
        """
        第一个参数永远是管道符前面那个变量
        :param arg: 道符前面那个变量
        :param arg2: 冒号后面的变量
        :return:
        """
        return "{} {}.".format(arg, arg2)
    View Code

    3.使用

    <p>自定义的filter方法</p>
    {% load myfilter %}
    {{ name|bl|safe }}
    {{ name|bl }}
    

      

    模板布局

    引入

     {% include 'left_nav.html' %}
    

      

     

    自定义

    1.定义文件mysimpletag.py,

    from django import template
    
    register = template.Library()
    
    
    @register.simple_tag(name="yimi")
    def my_sum(arg1, arg2, arg3):
        return "{}-{}-{}".format(arg1, arg2, arg3)
    
    
    
    @register.inclusion_tag('test/results.html')
    def show_results(n):
        n = 1 if n < 1 else int(n)
        data = ["第{}项".format(i) for i in range(1, n+1)]
        return {"results": data}
    View Code

     2渲染内容到result模板并引入

    引入
    {% load mysimpletag %}
    使用
    {% yimi 'wangzhen' 'changjiang' 'buyaolian' %}
    
    
    引入
    {% show_results 10 %}
    
    <hr>
    {% show_results 5 %}
    <hr>
    {% show_results 100 %}
    
    
    results.html
    
    <ul>
      {% for choice in results %}
        <li>{{ choice }}</li>
      {% endfor %}
    </ul>
    View Code

     模板嵌套

    1.创建base.html

    把对需要改动的内容,放入
        {% block page-css %}
    
        {% endblock %}  

    2.继承引入

    {% extends "base.html" %}
    {% block book_class %}
        active
    {% endblock %}
    

      

    引入静态文件

    方式一
    {% load static %}
    <img src="{% static 'hmbb.png' as xiaomao %}" alt="">
    <img src="{{ xiaomao }}" alt="">
    <img src="{{ xiaomao }}" alt="">
    <img src="{{ xiaomao }}" alt="">
    <img src="{{ xiaomao }}" alt="">
    方式二
    <img src="{% get_static_prefix %}hmbb.png" >
    方式三
    <img src="{% static 'hmbb.png' %}" >
    View Code

     其他

    1. 模板系统(字符串替换)
            1. 语法
                1. 变量相关: {{ name }},{{name|length}},{{name|default:"默认值"}}
                2. 逻辑相关:
                    1. if判断
                        {% if a > b %}
                        {% endif %}
                        
                        {% if a > b %}
                        {% else %}
                        {% endif %}
                        
                        {% if a > b %}
                        {% elif %}
                        {% else %}
                        {% endif %}
                    2. for循环
                        1. for循环的基本用法:
                            {% for i in name_list %}
                                {{ i }}
                            {% endfor %}
                            
                            {% for i in name_list %}
                                {{ i }}
                            {% empty %}
                                空空如也
                            {% endfor %}
                        
                        2. for循环可用的属性:
                            forloop.counter
                            forloop.counter0
                            forloop.revcounter
                            forloop.revcounter0
                            
                            forloop.first 
                            forloop.last 
                            
                            forloop.parentloop  --> 两层for循环,内层循环引用外层循环
                            
            2. filter
                1. 常用的内置filter
                    1. length
                    2. filesizeformat       --> 格式化文件大小的
                    3. date:'Y-m-d H:i:s'   --> 格式化时间的
                    4. slice
                    5. safe                 --> XSS攻击(跨站脚本攻击)
                    6. truncatechars:20     --> 截取字符,超过的用...表示
                    7. default
                        
                2. 自定义的filter
                    示例:
                        1. addsb
                        2. addstr
                    具体的实现方式:
                        1. 定义阶段
                            1. 在app下面新建一个python的包:templatetags
                            2. 在上面的Python包中新建一个Python文件,名字随意
                            3. 在上述python文件中:
                                from django import template
                                
                                # 生成一个注册用的实例
                                register = template.Library()
                                # 定义并注册一个自定义的filter函数
                                @register.filter(name='addsb')
                                def add_sb(arg):
                                    return "{} sb".format(arg)
                        2. 调用阶段:
                            1. 在Django的模板文件中,导入刚才新建的python文件
                                {% load py文件名 %}
                            2. 按照filter的语法调用
                                {{ name|addsb }}
  • 相关阅读:
    HiDPI的社区Wiki与部分解决方案
    Linux 桌面玩家指南:在 Ubuntu 中使用 deepin-wine,解决一些依赖 Windows 的痛点问题
    如何安装 Whisker Menu菜单
    为什么用 embed 方式插入的 Flash 元素总能把其它元素盖住?修改 z-index 属性也没用。
    Python 所谓的艺术操作
    Python 画矩形
    Python pygame中的颜色
    Python 创建一个Pycharm窗口
    Python画一个圆
    汉诺塔
  • 原文地址:https://www.cnblogs.com/huay/p/11306929.html
Copyright © 2011-2022 走看看