django模板语法和模块层

django模板语法和模块层

模板语法之过滤器

# 过滤器(类似于内置函数)
过滤器从字面的意思上,可以理解为:过滤掉不需要的,剩下我们需要的
# 语法结构
{{ 数据对象|过滤器名称:参数 }}  过滤器最多只能额外传输一个参数

常见的过滤器

过滤器 过滤器说明
length 获取数据的长度
add:'n' 算术加法或者字符串加法
file_size,filesizeformat 将数字转成合适的文件计量单位
default 判断当前数据对象对应的布尔值
date:'Y-m-d' 时间格式化
slice:'0:8' 索引切片
truncatewords:5 按照空格截取指定个数的文本
cut:' ' '移除指定的字符
safe 默认不对变量内的字符串进行html转义
<p>统计数据的长度:{{ s1|length }}</p>
    
<p>算术加法或者字符串加法:{{ n1|add:111}}、{{ s1|add:'big baby' }}</p>
        
 <p>将数字转成合适的文件计量单位:{{ file_size|filesizeformat }}、{{ file_size1|filesizeformat }}</p>
    
<p>时间格式化:{{ ctime|date:'Y-m-d' }}</p>
    
<p>索引切片:{{ s1|slice:'0:8' }}</p>
    
<p>按照空格截取指定个数的文本:{{ s2|truncatewords:5 }}</p>
    
<p>按照字符个数截取文本(包含三个点):{{ s2|truncatechars:5 }}、{{ s1|truncatechars:10 }}</p>

<p>移除指定的字符:{{ info|cut:'|' }}</p>
    
<p>是否取消转换:{{ tag1 }}、{{ tag1|safe }}、{{ scripts1|safe }}、{{ res }}</p>
    

模板语法之标签

# 标签
使用Django中的标签可以在模板中做一些简单的逻辑判断。 标签和{% %}配合使用

# 语法结构
  {% 名字 ...%}
  {% end名字 %}

# if 判断
{% if 条件1 %}
    <p>内容1</p>
{% elif 条件2 %}
    <p>内容2</p>
{% else %}
    <p>内容3</p>
{% endif %}

# for循环
提供了forloop关键字
{'parentloop': {}, 'counter0': 0, 'counter': 1, 'revcounter': 4, 'revcounter0': 3, 'first': True, 'last': False}
  
正常的for循环输出
{% for i in l1 %}
    <p>{{ i }}</p>
{% endfor %}

# for+if 嵌套使用
 {% for i in l1 %}
    {% if forloop.first %}
        <p>这是第一次循环</p>
    {% elif forloop.last %}
        <p>这是最后一次循环</p>
    {% else %}
        <p>中间循环</p>
    {% endif %}
    {% empty %}
        <p>for循环对象为空 自动执行</p>
 {% endfor %}

# 字典的用法
'提供了keys、values、items方法'
user{name:'jason',age:18}

{% for foo in user %}
	{{ foo }} 	# name age
{{ endfor }}    

{% for foo in user.keys %}
	{{ foo }}   # name age
{{ endfor }}    

{% for foo in user.values  %}
	{{ foo }}   # jason 18
{{ endfor }}  

{% for foo in user.items %}
	{{ foo }}   # ('name','jason')('age',18)
{{ endfor }}    

自定义过滤器、标签、inclusion_tag

# 自定义过滤器、标签、inclusion_tag 的步骤
1.在应用下需要创建一个名为templatetags的文件夹

2.在该文件夹内创建一个任意名称的py文件

3.在该py文件内需要先提前编写两行固定的代码
	from django import template
	register = template.Library()

自定义过滤器

# 自定义过滤器:只能接收两个参数

@register.filter(is_safe=True) # 括号内name可以对过滤器命名调用
def index(a, b):
    return a + b

{% load mytag %}  # 加载自定义过滤器
{{ n1|index:333 }} # 使用自定义过滤器

自定义标签

# 自定义简单标签:可以接收任意的参数
@register.simple_tag(name='my_tag')
def func1(a, b, c, d):
    return a + b + c + d
{% my_tag 1 2 3 4 %}  # 参数之间空格隔开即可

自定义inclusion_tag

# 自定义inclusion_tag
@register.inclusion_tag('left.html')
def func2(n):
    l1 = []
    for i in range(1, n + 1):
        l1.append(f'第{i}页')
    return locals()
{% func2 10 %}

# left.html
<ul>
    {% for foo in l1 %}
        <li>{{ foo }}</li>
    {% endfor %}
</ul>
'''
该方法需要先作用于一个局部html页面 之后将渲染的结果放到调用的位置
'''

模块的导入

# 模块的导入
将页面的某一个局部当成模块的形式
哪个地方需要就可以直接导入使用即可

# 模板导入格式
{% include '导入html文件名' %}

# 注释语法补充
<!---->  是HTML的注释语法
{##}	 是django模板语法的注释
"""
HTML的注释可以在前端浏览器页面上直接查看到
模板语法的注释只能在后端查看 前端浏览器查看不了
"""

模块的继承

# 继承的概念
你需要事先在你想要使用的主页面上划定区域做好标记,之后在子页面继承的时候你就可以使用在主页面划定的区域,也就意味着,如果你不划定任何区域,那么你子页面将无法修改主页面内容

'有很多网站的很多页面 其实都是差不多的 只是局部有所变化 模板的继承可以很好的实现该需求'
# 使用继承流程原理
1.先在模板中通过block划定将来可以被修改的区域
  {% block content %}
  	<h1>主页内容</h1>
  {% endblock %}

2.子板继承模板 利用block自动提示选取你想要修改的内容区域标记名称
	{% extends 'home.html' %}
    
3.修改划定的区域
	{% block content %}
    <h1>登录内容</h1>
	{% endblock %}
    
4.子页面还可以重复使用父页面的内容
	{{ block.super }}
"""
模板上最少应该有三个区域
	css区域、内容区域、js区域
子页面就可以有自己独立的css、js、内容
"""

模板继承语法

1.继承
{% extends '模版页面名' %}

2.局部修改
	# 1.你需要先去模版页面中划定可以被修改的区域
  	{% block '名字' %}
    	模版内容(666)
    {% endblock %}
  # 2.子页面中即成了模版页面之后 就可以根据名字修改
  	{% block '名字' %}
    	子版内容
      
# 子版页面除了可以自己写自己的之外 还可以继续使用模版的内容
    {{ block.super }} 
    {% endblock %} 

前期数据准备

"""
django自带的sqlite3数据库 功能很少 并且针对日期类型不精确

1.数据库正向迁移命令(将类操作映射到表中)
	python3 manage.py makemigrations
  python3 manage.py migrate
2.数据库反向迁移命令(将表映射成类)
	python3 manage.py inspectdb
"""
需求
	我们只想操作orm 不想使用网络请求
  	需要有专门的测试环境
    1.自己搭建
    	import os
			if __name__ == "__main__":
    			os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day54.settings")
    			import django
    			django.setup()
    2.pycharm提供
    	python console

posted @   洛阳城门听风雨  阅读(48)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示