模板语法

{{ }} 变量相关
{%%} 逻辑相关

ps: 前端获取后端传过来的容器类型的内部元素 统一采用句点符(.)

过滤器: |

default

  • {{ value|default:"nothing"}}

length

  • {{ value|length }}

filesizeformat

  • {{ value|filesizeformat }}

slice

  • {{value|slice:"2:-1"}}

date

  • {{ value|date:"Y-m-d H:i:s"}}

safe

  • {{ value|safe}}

    前后端取消转义:
    前端:
    |safe
    后端:
    from django.utils.safestring import mark_safe
    zzz = mark_safe('

    阿萨德搜啊第三款垃圾袋

    ')

    truncatechars

  • {{ value|truncatechars:9}}

truncatewords

  • {{ value|truncatewords:9}}

cut

  • {{ value|cut:' ' }}

    • 移除value中所有的与给出的变量相同的字符串

join

标签: {% %}

for循环

{% for foo in d.keys %}
    <p>{{ foo }}</p>
{% endfor %}
{% for foo in d.values %}
    <p>{{ foo }}</p>
{% endfor %}
{% for foo in d.items %}
    <p>{{ foo }}</p>
{% endfor %}

for循环可用的一些参数:

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

for ... empty

<ul>
{% for user in user_list %}
    <li>{{ user.name }}</li>
{% empty %}
    <li>空空如也</li>
{% endfor %}
</ul>

if判断

if,elif和else

{% if user_list %}
  用户人数:{{ user_list|length }}
{% elif black_list %}
  黑名单数:{{ black_list|length }}
{% else %}
  没有用户
{% endif %}

当然也可以只有if和else

{% if user_list|length > 5 %}
  七座豪华SUV
{% else %}
    黄包车
{% endif %}

ps: if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

with取别名

可以给一个比较复杂的取值操作取一个别名 之后在with语句中 就可以使用该别名

{% with l.6.3.name as ttt %}
    {{ ttt }}
    {{ l.6.3.name }}
{% endwith %}

csrf_token

这个标签用于跨站请求伪造保护。

在页面的form表单里面写上 {% csrf_token %}

自定义过滤器

在app位置创建一个 templatetags文件加 里面放相关的逻辑py文件

from django import template

register=template.Library ()

@register.filter(name="nash") # 自定义过滤器只是带有一个或两个参数的Python函数

@register.filter(name="nash")
def index(a,b):
    print('下午刚起床 一脸懵逼')
    return a + b

使用自定义过滤器

先导入 格式为 {{ 操作对象(作为第一个参数传入)|名字(可写==> :另一个参数) }}

{# 先导入我们自定义filter那个文件 #}
{% load app01_filters %}

{# 使用我们自定义的filter,这边对于的是取的名字 #}
{{ "hello"|nash:"world" }}

自定义标签

from django import template

register = template.Library ()

@register.simple_tag(name="nash") # 标签函数可以可传多参数

@register.simple_tag(name='apan')
def xxx(a,b,c,year):
    return '%s?%s|%s{%s'%(a,b,c,year)

使用自定义标签

先导入 格式为 {% 名字 空格隔开的参数 %}

{# 先导入我们自定义simple_tag那个文件 #}
{% load app01_simple_tag %}

{# 使用我们自定义的simple_tag #}
{% apan "9 "22 "11:41" "2019" %}

inclusion_tag

多用于返回html代码片段

register = template.Libary ()

@register.inclusion_tag(模版名,name=名字)

使用inclusion_tag

先导入 {% load 名字 %} 格式 {% 函数名 参数 %}

模板的继承与导入

我们通常会在母板中定义页面专用的CSS块和JS块,方便子页面替换。

母版

    {% block 给区域起的名字 %}

    {% endblock %}

    通常情况下一个模板中应该至少有三块
        {% block css %}
            页面css代码块
        {% endblock %}

        {% block js %}
            页面js代码块
        {% endblock %}

        {% block content %}
            页面主体内容
        {% endblock %}
子板继承模板
        先继承模板所有的内容
        {% extends 'home.html' %}

        然后根据block块的名字修改指定区域的内容
        {% block content %}
            <h1>登录页面</h1>
                <form action="">
                    <p>username:<input type="text" class="form-control"></p>
                    <p>password:<input type="text" class="form-control"></p>
                    <input type="submit" class="btn btn-success">
                </form>
        {% endblock %}

块(block)

通过在母板中使用{% block xxx %}来定义"块"。

在子页面中通过定义母板中的block名来对应替换母板中相应的内容。

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

组件(模版的导入, 一般都用 inclusion_tag 来代替)

可以将常用的页面内容如导航条,页尾信息等组件保存在单独的文件中,然后在需要使用的地方按如下语法导入即可。

{% include 'navbar.html' %}

静态文件配置

{% static %}

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

引用JS文件时使用:

{% load static %}
<script src="{% static "mytest.js" %}"></script>
02-12 13:31