django模板语言使用笔记

基本使用
编写模板

runoob.html

<h1>{{ hello }}</h1>
使用模板
from django.shortcuts import render
 
def runoob(request):
    context          = {}
    context['hello'] = 'Hello World!'
    return render(request, 'runoob.html', context)
使用参数
变量
{{ name }}
列表
{{ views_list }}
{{ views_list.0 }}
字典
{{ views_dict.name }}
过滤器

语法

{{ 变量名 | 过滤器:可选参数 }}

示例

{{ name|lower }}

可以套接

{{ my_list|first|upper }} // 一个过滤器管道的输出又可以作为下一个管道的输入

常见过滤器

  • lower

  • upper

  • addslashes

    添加反斜杠到任何反斜杠、单引号或者双引号前面

  • date

    显示格式化date或datetime对象

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

    返回变量长度

  • default

    {{ name|default:"菜鸟教程666" }}
    
  • truncatechars

如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分

{{ views_str|truncatechars:2}}
  • safe

    不需要转义

if/else
{% if condition %}
     ... display
{% endif %}
{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

接收and,or,not

{% if athlete_list and coach_list %}
     athletes 和 coaches 变量都是可用的。
{% endif %}
ifequal/ifnotequal
for

遍历列表

<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% endfor %}
</ul>

遍历字典

{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}

获取循环序号

forloop.counter: 顺序获取循环序号,从 1 开始计算
forloop.counter0: 顺序获取循环序号,从 0 开始计算
forloop.revcounter: 倒叙获取循环序号,结尾序号为 1
forloop.revcounter0: 倒叙获取循环序号,结尾序号为 0
forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False

{% empty %}

循环为空时执行

{% for i in listvar %}
    {{ forloop.counter0 }}
{% empty %}
    空空如也~
{% endfor %}
include 标签

允许在模板中包含其它的模板的内容

{% include "nav.html" %}
csrf_token

csrf_token 用于form表单中,作用是跨站请求伪造保护。

如果不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。

用了{% csrf_token %}标签,在 form 表单提交数据时,才会成功

解析见菜鸟教程

自定义标签和过滤器

自定义标签和过滤器的作用: 做自定义计算、或者转换显示等等

注意: 自定义过滤器的参数最多2个

步骤
  1. 创建templatetags文件夹,和templates目录同级

  2. 创建任意py文件,如my_tags.py

  3. 编写my_tags.py

    from django import template
    
    register = template.Library()
    
  4. 配置settings.py

    TEMPLATES = [
        {
            'BACKEND': 'django.template.backends.django.DjangoTemplates',
            'DIRS': [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_tags':'templatetags.my_tags'   # 添加这边三行配置      
                }                                      # 添加这边三行配置
            },
        },
    ]
    
  5. 自定义装饰器

    @register.filter
    def my_filter(v1, v2):
        return v1 * v2
    
  6. 使用自定义装饰器

    {% load my_tags %} // 导入
    {{ 11|my_filter:22 }}
    
  7. 自定义标签

    @register.simple_tag
    def my_tag1(v1, v2, v3):
        return v1 * v2 * v3
    
  8. 使用自定义标签

    {% load my_tags %} // 导入
    {% my_tag1 11 22 33 %}
    
模板继承
父模板预留
{% block 名称 %}
预留给子模板的区域,可以设置设置默认内容
{% endblock 名称 %}
子模板继承
{% extends "父模板路径"%}

子模板可以重写父模板预留处的内容

加载静态文件
  1. django.contrib.staticfiles添加到settings.INSTALLED_APPS

  2. settings.py中设置了STATIC_URL

STATIC_URL = '/static/'
  1. 加载

    {% load static %}
    <link rel="stylesheet" href="{% static 'style.css' %}">
    
自动加载
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',
            ],
            #添加在这个位置
            'builtins' : [
                'django.templatetags.static'
            ],
        },
    },
]
django-compress

用来压缩css和js

{% load compress %}
 
// css
{% compress css %}
        <link rel="stylesheet" href="{% static 'pygments/default.css' %}"/>
        <link rel="stylesheet" href="{% static 'blog/css/nprogress.css' %}">
{% endcompress %}
 
// js
{% compress js %}
        <script type="text/javascript" src="{% static 'blog/js/jquery-3.1.1.js' %}"></script>
        <script type="text/javascript" src="{% static 'blog/js/nprogress.js' %}"></script>
{% endcompress %}
 
缓存
{% load cache %}
 
{% cache 36000 nav %}
      {% include 'share_layout/nav.html' %}
{% endcache %}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coderMrGu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值