Django之模板基础
Django之模板
目录
变量
过滤器
标签的使用
变量
变量的引用格式
使用双括号,两边空格不能省略。
1 | 语法格式: {{var_name}} |
Template和Context对象
1 | context 字典中元素的键值 "Stephane" 对应了Template中的变量 "{{ name }}" 。 |
>>> python manange.py shell (进入该django项目的环境) >>> from django.template import Context, Template >>> t = Template('My name is {{ name }}.') >>> c = Context({'name': 'Stephane'}) >>> t.render(c) 'My name is Stephane.' # 同一模板,多个上下文,一旦有了模板对象,你就可以通过它渲染多个context,无论何时我们都可以 # 像这样使用同一模板源渲染多个context,只进行 一次模板创建然后多次调用render()方法渲染会 # 更为高效: # Low for name in ('John', 'Julie', 'Pat'): t = Template('Hello, {{ name }}') print t.render(Context({'name': name})) # Good t = Template('Hello, {{ name }}') for name in ('John', 'Julie', 'Pat'): print t.render(Context({'name': name}))
具体使用
html代码

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>Now {{ t }}</h1> <h1>Now {{ list.0 }}</h1> <h1>Now {{ dict.name }}</h1> <h1>Now {{ c.id }}</h1> </body> </html>
urls.py代码

from django.contrib import admin
from django.urls import path,re_path
from blog import views
urlpatterns = [
path('show_time/',views.show_time),
]
view.py代码

from django.shortcuts import render,HttpResponse,redirect
import time
class Animal():
def __init__(self,id,name):
self.id=id
self.name=name
变量
def show_time(req):
# return HttpResponse('hello')
# return render(req,"index.html")
t=time.ctime()
list=['name','age','sex']
dict={'name':'lili','age':18,'sex':1}
c=Amalis(2,'alex')
return render(req,"index.html",locals())
访问网页结果:
1 2 3 4 5 6 7 | Now Tue Feb 19 20 : 14 : 06 2019 Now name Now lili Now 2 |
过滤器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | add : 给变量加上相应的值 addslashes : 给变量中的引号前加上斜线 capfirst : 首字母大写 cut : 从字符串中移除指定的字符 date : 格式化日期字符串 default : 如果值是 False ,就替换成设置的默认值,否则就是用本来的值 default_if_none: 如果值是 None ,就替换成设置的默认值,否则就使用本来的值 #实例: #value1="aBcDe" {{ value1|upper }}<br> #value2=5 {{ value2|add: 3 }}<br> #value3='he llo wo r ld' {{ value3|cut: ' ' }}<br> #import datetime #value4=datetime.datetime.now() {{ value4|date: 'Y-m-d' }}<br> #value5=[] {{ value5|default: '空的' }}<br> #value6='<a href="#">跳转</a>' {{ value6 }} { % autoescape off % } {{ value6 }} { % endautoescape % } {{ value6|safe }}<br> {{ value6|striptags }} #value7='1234' {{ value7|filesizeformat }}<br> {{ value7|first }}<br> {{ value7|length }}<br> {{ value7| slice : ":-1" }}<br> #value8='http://www.baidu.com/?a=1&b=3' {{ value8|urlencode }}<br> value9 = 'hello I am yuan' |
标签(tag)的使用
tag标签的使用格式
使用大括号和百分比的组合来表示使用tag
1 | { % tags % } |
{# #}注释标签
Django 注释使用 {# #}。
1 | { # 这是一个注释 #} |
{% if %}标签
{% if %} 标签检查(evaluate)一个变量,如果这个变量为真(即,变量存在,非空,不是布尔值假),系统会显示在 {% if %} 和 {% endif %} 之间的任何内容。

{% if num >= 100 and 8 %} {% if num > 200 %} <p>num大于200</p> {% else %} <p>num大于100小于200</p> {% endif %} {% elif num < 100%} <p>num小于100</p> {% else %} <p>num等于100</p> {% endif %} {% if %} 标签接受and,or或者not来测试多个变量值或者否定一个给定的变量 {% if %} 标签不允许同一标签里同时出现and和or,否则逻辑容易产生歧义,例如下面的标签是不合法的: {% if obj1 and obj2 or obj3 %}
{% for %}标签
{% for %}标签允许你按顺序遍历一个序列中的各个元素,每次循环模板系统都会渲染{% for %}和{% endfor %}之间的所有内容。

<ul> {% for obj in list %} <li>{{ obj.name }}</li> {% endfor %} </ul> #在标签里添加reversed来反序循环列表: {% for obj in list reversed %} ... {% endfor %} #{% for %}标签可以嵌套: {% for country in countries %} <h1>{{ country.name }}</h1> <ul> {% for city in country.city_list %} <li>{{ city }}</li> {% endfor %} </ul> {% endfor %} #系统不支持中断循环,系统也不支持continue语句,{% for %}标签内置了一个forloop模板变量, #这个变量含有一些属性可以提供给你一些关于循环的信息 1,forloop.counter表示循环的次数,它从1开始计数,第一次循环设为1: {% for item in todo_list %} <p>{{ forloop.counter }}: {{ item }}</p> {% endfor %} 2,forloop.counter0 类似于forloop.counter,但它是从0开始计数,第一次循环设为0 3,forloop.revcounter 4,forloop.revcounter0 5,forloop.first当第一次循环时值为True,在特别情况下很有用: {% for object in objects %} {% if forloop.first %}<li class="first">{% else %}<li>{% endif %} {{ object }} </li> {% endfor %} # 富有魔力的forloop变量只能在循环中得到,当模板解析器到达{% endfor %}时forloop就消失了 # 如果你的模板context已经包含一个叫forloop的变量,Django会用{% for %}标签替代它 # Django会在for标签的块中覆盖你定义的forloop变量的值 # 在其他非循环的地方,你的forloop变量仍然可用 #{% empty %} {{li }} {% for i in li %} <li>{{ forloop.counter0 }}----{{ i }}</li> {% empty %} <li>this is empty!</li> {% endfor %} # [11, 22, 33, 44, 55] # 0----11 # 1----22 # 2----33 # 3----44 # 4----55
{% csrf_token %}
用于生成csrf_token的标签,用于防治跨站攻击验证。注意如果你在view的index里用的是render_to_response方法,不会生效。
其实这里是会生成一个input标签,和其他表单标签一起提交给后台的。
{% with %}
用更简单的变量名替代复杂的变量名
1 | { % with total = fhjsaldfhjsdfhlasdfhljsdal % } {{ total }} { % endwith % } |
{% verbatim %}: 禁止render
1 2 3 | { % verbatim % } {{ hello }} { % endverbatim % } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?