Django官方文档

可见https://docs.djangoproject.com/en/1.11/ref/templates/builtins/#std:templatetag-for

和python一样,Django也有自己的语法

后台向模板传递对象

传函数名到前端,会自动加括号调用,但是不支持传参

对象:打印了这个对象  

 

 

 

 

 

Django模板语法

两种标记符号

{{  }}   与变量相关 

{% %}与语法相关

遇到点号(.)查询优先级

1.字典的值             最高

2.属性或方法查询  其次

3.数字索引查询      最低

 

 

 

变量

通过索引:

  列表.索引值

通过方法:

  但是只能使用不带参数的语法

过滤器 针对遍历

本质:把管道左边当作第一个参数传递给右边的方法

values   
{{ value|default:"nothing"}}
如果values是False或null 使用默认值nothing

length
{{ value|length }}
计算value 长度


filesizeformat
格式化文件大小
{{ value|length }}

slice
切片字符串
{{value|slice:"2:-1"}}

date
没有%
{{ value|date:"Y-m-d H:i:s"}}

    truncatechars 

    {{ value|truncatechars:9}}  value大于多于多少长度 剩下部分用省略号表示

 

    truncatewords  {{ value|truncatechars:9}}   相当于按照空格切片取values个分组    
如:haha1 hahah2 hahaha3 haahha4 hahah5 ha5 ah6   values3就是 haha1 hahah2 hahaha3


cut
{{ value|cut:' ' }}
移除value中所有的与给出的变量相同的字符串

 join

str.join(list) 




 

  

 safe 

在前端取消转移 变为html代码

{{ dict_obj.name|safe }}

后端:from django.utils.safestring import mark_safe
xxx = mark_safe('<h1>我是h1标签</h1>') #把xxx转为真正安全的html代码

 

标签

for循环

{% for foo in l %}
	<p>{{ foo }}</p>
	<p>{{ forloop }}</p>
{% endfor %}
forloop 是一个字典  {'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 5, 'revcounter0': 4, 'first': True, 'last': False} 
parentloop 是上级循环
forloop

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

  

if判断

{% if a %}
  you a
{% elif b %}
  you b
{% else %}
  没有用户
{% endif %}

  

with 别名

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

 或者

{% with business.employees.count as total %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

自定义 过滤器 标签   inclusion_tag

自定义过滤器(最多一个参数)

1.在app下新建 templatetags

2.建立py

3. 导入

from djago import template

register = template.Library()

4.过滤器由  @register.filter(name="cut") 装饰

5.返回结果

@register.filter(name="cut")
def cut(value, arg):
    return value.replace(arg, "")

6 导入py文件 

{{ somevariable|cut:"0" }}
{{ d.name|addSB }}

 

自定义标签

@register.simple_tag
def plus(a,b,c):
  return a+b+c

{% plus 1 2 3 %}  用的是方法

 

自定义inclusion_tag

如果提示  Django: is not a registered tag library.

在setting.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        'libraries': {
            "my_tag": "app01.templatetags.xxx",
        },
        },
    },
]

 

{% 别名 参数%} 拿到页面

 

 模板的继承与导入

一般来说 我们模块的话有三个块  一个JS块一个内容 一个css

 

 

 

 

 

 

如果要继承原来的

{{ block.super }}

 

 

 

 导入组件

{% include "cbs.html" %}

静态文件相关

{% load static %}
<img src="{% static 'images/hi.jpg' %}" alt="Hi!" />
起别名:方便导入{% static "images/hi.jpg" as myphoto %}



 

 

 

 

 

 

 

 

 

 

 

 

 

 

常用语法:{{ XXX}},{% xxx %}

举个例子

def template_test(request):
    l = [11, 22, 33]
    d = {"name": "alex"}

    class Person(object):
        def __init__(self, name, age):
            self.name = name
            self.age = age

        def dream(self):
            return "{} is dream...".format(self.name)

    Alex = Person(name="Alex", age=34)
    Egon = Person(name="Egon", age=9000)
    Eva_J = Person(name="Eva_J", age=18)

    person_list = [Alex, Egon, Eva_J]
    return render(request, "template_test.html", {"l": l, "d": d, "person_list": person_list})

然后在 template_test.html 可以引用这个变量


{# 取l中的第一个参数 #}
{{ l.0 }}
{# 取字典中key的值 #}
{{ d.name }}
{# 取对象的name属性 #}
{{ person_list.0.name }}
{# .操作只能调用不带参数的方法 #}
{{ person_list.0.dream }}

Filters(过滤器)

在Django的模板语言中,通过使用 过滤器 来改变变量的显示。

过滤器的语法: {{ value|filter_name:参数 }}

使用管道符"|"来应用过滤器。

例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。

注意事项:

  1. 过滤器支持“链式”操作。即一个过滤器的输出作为另一个过滤器的输入。
  2. 过滤器可以接受参数,例如:{{ sss|truncatewords:30 }},这将显示sss的前30个词。
  3. 过滤器参数包含空格的话,必须用引号包裹起来。比如使用逗号和空格去连接一个列表中的元素,如:{{ list|join:', ' }}
  4. '|'左右没有空格没有空格没有空格

 

Django的模板语言中提供了大约六十个内置过滤器。

我们简单介绍下里面常用的过滤器。

 

default

如果value没有值 即为空,则赋值为nothing
{{ value|default:"nothing"}}

 

length

返回值的长度,作用于字符串和列表。

{{ value|length }}

返回value的长度,如 value=['a', 'b', 'c', 'd']的话,就显示4.

 

filesizeformat

将值格式化为一个 “人类可读的” 文件尺寸 (例如 '13 KB''4.1 MB''102 bytes', 等等)。例如:

{{ value|filesizeformat }}

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

slice

切片

{{value|slice:"2:-1"}}
如果value 是一个列表的话
如 value=['a', 'b', 'c', 'd']的话,就显示
['c']

safe

不做介绍,一句话让 字符串变为 HTML 代码

 

我们简单介绍下里面常用的模板

 

comment

注释

{%  comment  "Optional note" %}
adasdasdasasdasd
{% endcomment %}

 

truncatechars

一定字符串之后显示...例如我们常见网页的详解

{{ value|truncatechars:9}}

 

在介绍block之前我们先介绍下母版

cut

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

{{ value|cut:' ' }}
切掉空格

join

每个value字符串后拼一个内容

 

 

block

此模块可以用来继承母版

 

posted on 2019-06-10 22:04  谢Rain  阅读(1144)  评论(0编辑  收藏  举报