Django-模板

Django的模板是用于快速生成页面返回给客户端,用于前后端不分离的业务,模板包含两部分,html代码和模板标签。

模板是一个文本文件。它可以生成任何基于文本的格式(HTML、XML、CSV 等)。

一、模板位置

我们在settings的配置中可以找到如下代码

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',
            ],
        },
    },
]

Django 模板查找机制: Django 查找模板的过程是在每个 app 的 templates ⽂件夹中找(⽽不只是当前 app 中的代码只在当前的 app 的 templates ⽂件 夹中找)。各个 app 的 templates 形成⼀个⽂件夹列表,Django 遍历这个列 表,⼀个个⽂件夹进⾏查找,当在某⼀个⽂件夹找到的时候就停⽌,所有的都 遍历完了还找不到指定的模板的时候就是 Template Not Found (过程类似于 Python找包)。这样设计有利当然也有弊,有利是的地⽅是⼀个app可以⽤另 ⼀个app的模板⽂件,弊是有可能会找错了。所以我们使⽤的时候在 templates 中建⽴⼀个 app 同名的⽂件夹,这样就好了

二、模板的渲染

2.1、loader加载

好处是可以加载一次模板进行多次渲染

index.html

<h1>{{ content }} h1>

views.py

def index(request):
	# 加载模板
    temp = loader.get_template('./app/index.html')
    # 渲染模板
    res = temp.render(context={'content': 'Hello Django'})
    # 返回结果
    return HttpResponse(res)

2.2、render

def index(request):
    return render(request, 'app/index.html', context={'content': 'Hello Django'})

三、模板语法

django模板中包括两部分:变量和内置标签。变量会在模板渲染时被其值代替, 内置标签负责逻辑控制。

3.1、变量

变量在模板中的表示为:{{ 变量名 }},变量名就是render中context中的键。变量 可以基本类型中的数值、字符串、布尔,也可以是字典、对象、列表等。django 提供了点号来访问复杂数据结构。

列表、元组:元素可以使⽤索引引⽤,不能使⽤负索引,语法:变量.索引 索引也是从0开始
字典: 语法:字典变量.key 
对象: 语法:对象.属性 对象.⽅法名(⽅法不能有参数)

3.2、过滤器

过滤器是在变量显示之前修改它的值的⼀个⽅法,过滤器使⽤管道符。过滤器可以串联调⽤

{{ 变量|⽅法 }}

常见的过滤器方法

方法 作用 示例
default 缺省值 {{value|default:“缺省值” }}
default_if_none 如果变量是none则显示缺省值 {{value|default_if_none:‘hello’ }}
cut 从字符中删除指定字符 {{value| cut ’ '}} # 删除所有空格
length 获取宁符串或列表 {{ str|length}}
lower 所有字母小写
upper 所有字母大写
truncatechars 截取字符串前n个字符 {{str|truncatechars:9}}
date 格式化日期字符串{{value date:“Y-m-d H:i:s” }}
add 增加变量的值 {{value|add:“3” }}
divisibleby 把变量的值除以指定的值 {{value|divisibleby:“3” }}
first 获取列表起一个元素
last 获取列表最后一个元素
join 列表内容连接为一个字符串 {{value|join ‘-’}}
autoescape 设置或者取消转义 {%autoescape off%}{{val}}{%endautoescape%}

下面是一些示例

{#没做处理的变量:#}
{{ test }}
{#设置了默认值的变量 在这个值被django认为是False的时候会使用此默认值。比如:空字符串,None。#} {{ xx|default:'xxxxx' }}
{#设置了只有为None时才使用默认值的变量#} {{ xx|default_if_none:'aaaaa'}}
{#变为小写后的变量#} {{ test|lower }}
{#先变为小写再将首字母大写后的变量#} {{ test|lower|capfirst }}
{#两个数字变量相加 add:字符串相加,数字相加,列表相加,如果失败,将会返回一个空字符串#} {{ num1|add:num2 }}
{#两个字符串变量相加#} {{ test|add:xx }}
{#列表变量的第一个元素#} {{ list|first }}
{#列表变量的最后一个元素#} {{ list|last }}
{#默认的data日期时间格式#} {{ now|date }}
{#默认的time时间格式#} {{ now|time }}
{#这是data过滤器的年月日24小时制时间格式#} {{ now|date:'Y/m/d/H:i:s' }}
{#这是time过滤器的时分秒12小时制时间格式#} {{ now|time:'h:i:s' }}
{#这是字符串的join方法 跟python中join一样的用法#} {{ list|join:'oooo' }}
{#这是字符串的长度方法#} {{ test|length }}
{#这是列表的长度是否为4#} {{ list|length_is:4 }}
{#下面这俩有xxx.html类型的,针对html,截断标签中的字符,而不会截断标签#} {#这是字符串只显示4个字符,其余省略(但是占3位)#} {{ test|truncatechars:7 }}
{#这是字符串只显示2个单词,其余省略(不占位)#} {{ test|truncatewords:2 }}
{#这是字符串的切片#} {{ test|slice:'1:4' }}
{#这是列表的切片#} {{ list|slice:'2' }}
{#这是含html标签的字符串#} {{ html }}
{#这是去掉字符串中的html标签#} {{ html|striptags }}
{#这是关掉自动转义,使字符串中html标签生效#} {{ html|safe }}
{#这是没做处理的小数#} {{ float }}
{#这是保留了一位小数#} {{ float|floatformat }}
{#这是保留了两位小数#} {{ float|floatformat:'2' }}

3.3、内置标签

语法:{% tag %}

3.3.1、if
{% if express1 %}
	# to do
{% elif express2 %}
	# to do
{% else %}
	# to do
{% endif %}

if表达式中使⽤以下运算符(优先级从⾼到低):

< >= <= == !=
in 、not in
is、is not
not
and
or

3.3.2、for
{% for x in y %}
...
{% endfor %}

反向迭代

{% for value in c [1,2,3,4,5] reversed %}
	{{ value }}---
{% endfor %}

empty

{% for value in c %}
	{{ value }}---
{% empty %}
	数据不存在
{% endfor %}

字典迭代

# e = {'a':20,'b':40}
{% for k,v in e.items %}
	
{{ k }}---{{ v }}
{% endfor %}千
3.3.3、ifequal/ifnotequal

用于判断两个值想等或者不相等

{% ifequal var var %}
{% endifequal %}
{% ifnotequal var var %}
{% endifnotequal %}
3.3.4、注释
{# 这里写注释 #}

四、静态资源配置

什么是静态资源:css、js、images 需要从外部导⼊的资源

4.1、在模板中使用静态资源
{% load static %}
{#硬编码#}

{#软编码 建议使用这种#}

需要在setting中加一句话,其实就是这个位置定义了静态资源的存放位置

STATIC_URL = '/static/'
STATICFILES_DIRS = [
    os.path.join(BASE_DIR,'static'),
]

你可能感兴趣的:(#,Django,django,python,后端)