首页 > 其他分享 >Django模板层

Django模板层

时间:2022-11-27 21:45:53浏览次数:40  
标签:语法 自定义 html Django 传递 tag 模板

Django模板层

目录

模板语法传值

# 模板语法形式:1.{{ 变量相关 }} 2.{% 逻辑相关 %}
# 模板语法可以传递的后端数据类型
# 包括基本数据类型、函数(自动加括号执行,并传递返回值,不支持传参)、类(自动实例化)、对象(可以调用对象自动传参或者无参方法 eg:__str__(self))
# 原则,先判断接收的变量名是否可以添加'()'调用,能调用就调用。

# django模板语法的取值,只能使用'.'取值,固定格式
'''
<p>{{ dict1.key1 }}</p>
<p>{{ list1.index1 }}</p>
<p>{{ dict1.key1.index1.keyx }}</p>
'''
# 可以'.'键'.'索引或者混用

过滤器

# 即模板语法内置方法
# 基本语法:{{ 数据|过滤器:参数 }}
s = 'abc'
<p>{{ s|lenth }}</p> # 统计长度,即 <p>3</p>
<p>{{ n|default:'空' }}</p> # 默认值,当n为True,就传递n的值,否则传递default值
<p>{{ file_size|filesizeformat }}</p> # 传递格式化后的文件大小
<p>{{ current_time|date:'Y-m-d H:i:s' }}</p> # 传递格式化后的时间
<p>{{ l|slice:'0:4:2' }}</p> # 传递切片
<p>{{ info|truncatechars:9 }}</p> # 传递截取后的字符,效果:123456...
<p>{{ info|truncatewords:3 }}</p> # word1 word2 word3...(长度不含...,而且切取依据是空格)
<p>{{ info|cut:' ' }}</p> # 传递移除' '之后的字符
<p>{{ list1|join:'$' }}</p> # 传递用'$'连接各元素后的字符串
<p>{{ n|add:2 }}</p> # 传递n+1
<p>{{ s|add:info }}</p> # 传递s+info
<p>{{ h1|safe }}</p> # 取消转义
# 后端取消转义
html_code = '<h1>ahhahahahah</h1>'
h2 = mark_safe(html_code)

标签

# for循环
'''
{% for li in list1 %}
        {{ forloop }}
{% endfor %}
'''
'''
{% for li in list1 %}
        <p>{{ li }}</p>
{% endfor %}
'''
# if判断
'''
{% if bllo1 %}
    <p>hahahah</p>
{% elif %}
    <p>wahahahahahha</p>
{% else %}
    <p>xixiixixxiix</p>
{% endif %}
'''

# for + if
'''
{% for li in list %}
    {% if forloop.first %}
        <p>第一次循环</p>
    {% elif forloop.last %}
        <p>最后一次循环</p>
    {% else %}
        <p>{{ li }}</p>
    {% endif %}

    {% empty %}
        <p>for循环的对象是空</p>
{% endfor %}
'''

'''
{% for foo in dict1.keys/.values/.items %}
        {{ forloop }}
{% endfor %}
'''

# with语法
'''
{% with dict1.key2.index1.keyx as s %}
        <p>s</p>
        <p>s</p>
        <p>s</p>
        <p>s</p>
        <p>s</p>
        <p>s</p>
{% endwith %}
'''

自定义过滤器、标签、inclusion_tag

'''
1.在应用下创建一个templatetags文件夹
2.在该文件夹内创建任意名称的py文件 eg: mytag.py
3.在该py文件内:
from django import template
register = template.Library()

'''

# 自定义过滤器(最多两个参数)
@register.filter(name='sum_filter')
def my_sum(a1,a2):
    return a1 + a2
# 自定义过滤器调用
{% load mytag %}
<p>{{ a1|sum_filter:a2 }}</p>


# 自定义标签(可以有多个参数)
@register.simple_tag(name='my_tag')
def index(a, b, c, d):
    return f'{a}/{b}/{c}/{d}'

# 自定义标签的调用
{% load mytag %}
<p>{% my_tag 'a' 'b' 'c' 'd' %}</p>


# 自定义inclusion_tag
@register.inclusion_tag('left_menu.html')
def left(n):
    data = [f'第{i}项' for i in range(n)]
    return locals() #将data传递给left_menu.html 即 return {'data':data}
# 定义渲染工具页面 left_menu.html
'''
<ul>
    {% for datum in data %}
        <li>{{ datum }}</li>
    {% endfor %}
</ul>
'''
# 自定义inclusion_tag调用
{% load mytag %}
{% left 9 %}

模板的继承

# 模板页面设置
'''
<div class="panel-body">

{% block var_content %}
    <div class="jumbotron">
      <h1>Hello, world!</h1>
      <p>...</p>
      <p><a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a></p>
    </div>
{% endblock %}

</div>
'''

# 实例页面
'''
{% extends 'home.html' %}

{% block var_content %}
    <h1>注册页面</h1>
{% endblock %}
'''

# 一般情况下,模板页面应该至少有三块可以被修改的区域
'''
1.css区域
{% block css %}
{% endblock %}
2.html区域
{% block content %}
{% endblock %}
3.js区域
{% block js %}
{% endblock %}
'''

模板的导入

# 即将模板页面模块化,然后实例页面直接使用语法将模板页面所有代码直接导入
{% include 'part.html' %}

标签:语法,自定义,html,Django,传递,tag,模板
From: https://www.cnblogs.com/missfxy/p/16930670.html

相关文章

  • Django初识
    Django初识目录Django初识基本操作项目主要文件介绍初始技巧静态文件配置Request对象form表单request.methodrequest.POSTrequest.GETpycharm连接数据库(MySQL)django连接数......
  • Django路由层
    Django路由层目录Django路由层路由匹配无名分组有名分组反向解析无名分组反向解析有名分组反向解析路由分发名称空间伪静态虚拟环境null路由匹配#url方法第一个参数是......
  • Django版本差异
    Django版本差异#一、路由层'''django1.x路由层使用url方法django2.x/3.x路由层使用path方法可以根据习惯使用re_pathpath方法支持5种转换器'''fromdjango.ur......
  • Django-ORM简介
    DjangoORM目录DjangoORM字段的增删改查数据的增删改查创建表关系null#即对象关系模型#类——表#对象——记录#对象属性(值)——记录某个字段(值)#在models.py中写......
  • 学习笔记-Django框架的使用
    前言:本博客为技术小白的记录学习过程,有错误或不解的地方请指出!!!一.安装和创建项目1.安装1.1命令行下载pip3installdjango==1.11.11 (可以跟镜像地址:-i+镜像地址......
  • VH6501模板工程介绍(一)
    VH6501硬件结构1.式样1.正向有5个灯,用来指示干扰的触发状态,干扰类型(数字或模拟),通道通信以及设备状态。2.两个DB9接口(公头male和母头female),这是CAN或CANFD通道,单节点干......
  • [模板] 线段树
    线段树template<classT,classF>classSegmentTree{constintn;vector<T>node;voidupdate(intrt,intl,intr,intpos,Ff){if(r......
  • [模板] 并查集
    并查集structDSU{vector<int>fa,rk;explicitDSU(intn):fa(n+1),rk(n+1){for(inti=1;i<=n;i++)fa[i]=i;}......
  • k8s部署应用精简示例(nginx)模板
    创建一个namespace1kind:Namespace2apiVersion:v13metadata:4name:nginx-test创建一个configmap1apiVersion:v12kind:ConfigMap3metadata:4......
  • django 定时任务 Error: no such table: django_apscheduler_djangojob
    使用django的定时任务一般出现各种问题例如找不到这个注册表或者urls不存在等etc....版本不兼容我的版本django2.2.8django_apscheduler==0.2.12APScheduler~......