Django之模板语法

本文详细介绍了Django的模板语法,包括如何将数据从后端传递到前端页面,前端注释方式,过滤器的使用,标签的创建,以及模板的继承和导入。还涉及到静态文件配置,以及自定义过滤器和标签的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模板语法之数据传递

将数据从后端传给前端页面的方法

# 第一种
return render(request,'index.html',{'n':n})
# 第二种
return render(request,'index.html',locals())
# 将当前所在的名称空间中的名字全部传递给前端页面

python所有数据类型都可以传

传函数名——传过来会自动加括号调用,显示返回值。

传对象——对象内存地址,等于后端print对象,可通过点方法获取属性或调用方法

模板语法不能传参,若函数或方法有参数,不能使用

前端获取后端传过来的容器类型的内部元素,通过句点符..数字,数字就是索引,字典就是用.key

也可点各个数据类型的内置方法(不需要传参的)

前端两种注释

模板语法的注释不会展示到前端页面:{#注释#}
原生html注释会展示到前端:<!--注释-->
这里的展示到前端是指检查前端代码时是否可见。

模板语法之过滤器

语法:{{后端传来的数据 | 过滤方法}},前面的值会当做第一个参数传递给|后面的函数

统计字符串或列表长度:length
传入的值是空则返回default后面默认参数:default:'传值为空'
将数字格式化成表示文件大小的单位:filesizeformat
格式化时间(不要加百分号):date:'Y-m-d'
切片:slice:'0:8:2'
截取固定的长度的字符串,三个点也算:truncatechars:长度
按照空格截取文本内容:truncatewords:空格数
给数字加一个值,如果第一个参数是字符串,会默认全转成字符串进行拼接:add
取消转义:默认不会识别标签语法,防止危险攻击。取消转义后能识别
	前端 
		safe 
	后端 
    	from django.utils.safestring import mark_safe
        x = mark_safe('<h1>我是h1标签</h1>')
    

模板语法之标签

		# for循环
			{% for foo in l %}
				<p>{{ foo }}</p>
				<p>{{ forloop }}</p>
			{% endfor %}

		 # if判断
			{% if flag %}
				<p>flag不为空</p>
				{% else %}
				<p>flag是空</p>
			{% endif %}

		# 嵌套使用
			{% for foo in l %}
				{% if forloop.first %}
					<p>这是我的第一次</p>
				{% elif forloop.last %}
					<p>这是最后一次了啊</p>
				{% else %}
					<p>嗨起来!!!</p>
				{% endif %}
			{% endfor %}

		# empty
			当你的for循环对象为空的时候会自动走empty代码块儿的内容
			后端:
				l = None
			前端:
			{% for foo in l %}
				{% if forloop.first %}
					<p>这是我的第一次</p>
				{% elif forloop.last %}
					<p>这是最后一次了啊</p>
				{% else %}
					<p>嗨起来!!!</p>
				{% endif %}
				{% empty %}
					<p>你给我的容器类型是个空啊,没法for循环</p>
			{% endfor %}

模板语法之自定义

必须先做的事

  1. 在应用名下新建一个名为templatetags文件夹(必须叫这个名字)

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

  3. 在该py文件中需要固}定写下面两句代码

  4. 在前端页面{%load 新建的py文件%}

    from django import template
    register = template.Library()
    

自定义过滤器

# 后端
@register.filter(name='XBB')
def index(a,b):
    return a+b
# 前端
{{ 666|XBB:8 }}

自定义标签

# 后端
@register.simple_tag
def plus(a,b,c):
	return a+b+c
# 前端
{% plus 1 2 3 %}

自定义inclusion_tag

# 自定义inclusion_tag
@register.inclusion_tag('login.html',name='login')
def login(n):
    l = [ '第%s项'%i for i in range(n)]
    return {'l':l}
# login.html
<ul>
    {% for foo in l %}
    <li>{{ foo }}</li>
    {% endfor %}
</ul>
# 调用
{% login 5 %}

模板的继承与导入

继承

首先需要在被继承的模板中划分多个区域
	{% block 给区域起的名字 %}

	{% endblock %}
	
通常情况下一个模板中应该至少有三块
    {% block css %}
    页面css代码块
    {% endblock %}

    {% block js %}
    页面js代码块
    {% endblock %}

    {% block content %}
    页面主体内容
    {% endblock %}
子板继承模板
	先继承模板所有的内容
	{% extends 'home.html' %}
		
然后根据block块的名字修改指定区域的内容
	{% block 想修改区域的名字 %}
		修改
	{% endblock %}

导入

模板的导入:将一段html当做模块的方式导入到另一个html展示
{% include '想导入的html文件名' %}

静态文件配置

{% load static %}  
# 第一种方式
<link rel='stylesheet' href="{% static 'css/mycss.css'%}"> 
# 第二种方式
<link rel='stylesheet' href="{% get_static_prefix %}css/mycss.css">
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值