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 }}
原文地址:https://www.cnblogs.com/huay/p/11306929.html