Python Django 模版全解与实战
**本文首先介绍了Django模板系统的基础知识,接着探讨了如何安装和配置
2023-07-08本文首先介绍了Django模板系统的基础知识,接着探讨了如何安装和配置Django模板系统,然后深入解析了Django模板的基本结构、标签和过滤器的用法,阐述了如何在模板中展示模型数据,最后使用一个实际项目的例子来演示如何在实际开发中使用Django模板系统。
Django模板系统的简介Django模板系统是一个强大的组件,它允许我们根据所提供的数据动态生成HTML、XML等结构化文本。模板系统不仅易于使用,且功能丰富。它包括一个内置的语言:Django模板语言 (DTL),这是一种简单、非侵入式的语言,用于定义模板的结构和逻辑。
例如,在一个Django模板中,我们可以使用变量和标签来动态地生成内容:
(资料图片仅供参考)
# Django模板示例{{ book.title }} {% if user.is_authenticated %} Hello, {{ user.username }}! {% endif %}
以上代码中,花括号{{ }}
用于输出变量的值,标签{% %}
用于执行逻辑操作。
Django模板是由一系列特殊的语法构成的文本文件,用于动态生成HTML、XML或其他标记语言。下面我们来详细了解一下Django模板的基本结构。
模板语法Django模板主要使用两种语法:
变量:用双大括号({{ }})包裹。比如{{ variable }}
,Django将会将其替换为变量的值。标签:用大括号和百分号({% %})包裹。标签提供了模板的控制结构,比如循环、条件语句等。比如{% for item in list %}...{% endfor %}
。模板继承Django模板系统支持模板继承。这是一种DRY(Don"t Repeat Yourself)的设计原则。你可以定义一个基础模板(base template),然后让其他模板继承这个基础模板并覆盖其中的某些部分。
例如,定义一个基础模板base.html
:
{% block content %}{% endblock %}
然后,定义一个子模板child.html
,继承base.html
并覆盖content
块:
{% extends "base.html" %}{% block content %}Hello, Django!
{% endblock %}
其他模板除了继承,Django模板还支持包含(include)其他模板,这可以帮助你将模板分解为小的、可重用的部分。
例如,定义一个模板header.html
:
Welcome to My Website
然后,在另一个模板中包含这个模板:
{% include "header.html" %}This is the main content...
配置Django模板配置Django模板系统Django模板系统默认已经被包含在Django项目中。你可以在项目的settings.py
文件中找到模板的配置信息:
TEMPLATES = [ { "BACKEND": "django.template.backends.django.DjangoTemplates", "DIRS": [BASE_DIR / "templates"], ... },]
你可以在"DIRS"
配置项中添加模板的路径。默认情况下,Django会在每个应用的templates
目录下查找模板文件。
Django模板系统可以从多个位置加载模板。默认情况下,Django会在每个应用的templates
目录下查找模板文件。你可以通过修改TEMPLATES
配置中的"DIRS"
选项来添加其他模板目录。例如,你可以添加一个全局的模板目录:
# settings.pyimport osBASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))TEMPLATES = [ { ... "DIRS": [os.path.join(BASE_DIR, "templates")], ... },]
在此配置中,所有的模板文件都会在项目根目录下的templates
文件夹中查找。
在TEMPLATES
配置中,"BACKEND"
选项用于指定使用哪个模板引擎。Django默认使用的是自带的模板引擎,即django.template.backends.django.DjangoTemplates
。你也可以切换到其他模板引擎,例如Jinja2:
TEMPLATES = [ { "BACKEND": "django.template.backends.jinja2.Jinja2", ... },]
注意,不同的模板引擎可能需要不同的配置,并且提供的模板语言也可能不同。
配置自定义模板标签和过滤器如果你有自定义的模板标签和过滤器,你需要把它们放在某个应用下的templatetags
目录中。然后在INSTALLED_APPS
配置中添加该应用,Django就会自动加载你的自定义模板标签和过滤器:
# settings.pyINSTALLED_APPS = [ ... "myapp", ...]
模板标签详解Django模板系统中的标签(Tags)提供了各种控制结构,包括循环、条件语句、模板继承等。接下来我们详细介绍一些常用的标签。
for标签for
标签用于在模板中循环遍历序列:
{% for item in item_list %} {{ item.name }}
{% endfor %}
if标签if
标签用于条件判断。你可以使用elif
和else
进行多分支判断:
{% if user.is_authenticated %} Welcome back, {{ user.username }}.
{% else %} Please log in.
{% endif %}
extends标签和block标签extends
标签用于模板继承,block
标签用于定义可被子模板覆盖的区块:
{% block content %}{% endblock %}{% extends "base.html" %}{% block content %}Hello, Django!
{% endblock %}
include标签include
标签用于包含其他模板,使得模板可重用:
{% include "header.html" %}
url标签url
标签用于生成URL。它接受一个视图函数的名称或URL模式的名称,以及可选的参数,然后返回对应的URL:
Home
csrf_token标签在使用POST表单时,csrf_token
标签用于生成CSRF令牌,以防止跨站请求伪造攻击:
模板过滤器在Django模板中,过滤器可以在变量被显示之前对其进行修改。过滤器的语法是在变量名后面添加一个竖线(|)和过滤器的名称。如果过滤器需要参数,可以使用冒号(:)添加。让我们详细了解一下。
基本使用比如,我们可以使用date
过滤器来格式化日期:
{{ date_var|date:"F j, Y" }}
使用lower
过滤器将文本转换为小写:
{{ "Hello World"|lower }}
链接过滤器你还可以链接多个过滤器,他们会按照从左到右的顺序执行:
{{ "Hello World"|lower|capfirst }}
自定义过滤器除了使用Django内置的过滤器,你还可以创建自己的过滤器。为此,你需要在某个应用下的templatetags
目录中创建一个Python文件,然后在其中定义你的过滤器函数,并使用register.filter
装饰器注册它:
from django import templateregister = template.Library()@register.filterdef my_filter(value): # 这是一个简单的过滤器,它返回值的第一个字符 return value[0]
然后你就可以在模板中使用这个过滤器了:
{{ "Hello World"|my_filter }}
Django模板中展示模型数据Django框架将模型数据和模板视图分离,这让我们在模板中方便地展示模型数据。在视图函数中,我们可以查询模型数据,然后将它传递给模板。在模板中,我们使用特殊的语法来访问和展示这些数据。
在视图中准备数据假设我们有一个Blog
模型,它有一个title
字段和一个content
字段。在我们的视图函数中,我们可以查询所有的博客:
from django.shortcuts import renderfrom .models import Blogdef blog_list(request): blogs = Blog.objects.all() # 查询所有的博客 return render(request, "blog_list.html", {"blogs": blogs})
在模板中展示数据然后,在我们的blog_list.html
模板中,我们可以使用for
标签来遍历所有的博客,并使用变量语法来展示每个博客的标题和内容:
{% for blog in blogs %}{{ blog.title }}
{{ blog.content }}
{% endfor %}
使用过滤器格式化数据在模板中,我们还可以使用过滤器来对模型数据进行格式化。例如,我们可以使用date
过滤器来格式化日期,或者使用truncatechars
过滤器来限制文本的长度:
{% for blog in blogs %}{{ blog.title }}
{{ blog.publish_date|date:"F j, Y" }}
{{ blog.content|truncatechars:100 }}
{% endfor %}
在实际的项目中使用Django模板Django模板系统在实际的项目开发中扮演着重要的角色。下面我们就以一个简单的博客系统作为例子,演示如何在实际项目中使用Django模板。
第一步:定义你的模型首先,我们需要在我们的应用中定义一个模型。在这个例子中,我们定义一个Post
模型来表示博客文章:
from django.db import modelsclass Post(models.Model): title = models.CharField(max_length=200) # 文章标题 content = models.TextField() # 文章内容 pub_date = models.DateTimeField(auto_now_add=True) # 发布日期
第二步:创建视图接着,我们需要创建一个视图来处理用户的请求。在这个视图中,我们可以获取所有的博客文章,并将它们传递给模板:
from django.shortcuts import renderfrom .models import Postdef post_list(request): posts = Post.objects.all() # 获取所有的博客文章 return render(request, "blog/post_list.html", {"posts": posts}) # 将文章传递给模板
第三步:编写模板然后,我们可以创建一个模板来展示博客文章。在这个模板中,我们使用for
标签来遍历所有的文章,并使用变量来展示文章的标题和内容:
{% for post in posts %}{{ post.title }}
{{ post.content }}
Published on {{ post.pub_date|date:"F j, Y" }}
{% endfor %}
第四步:配置URLs最后,我们需要在urls.py
文件中配置URL,使得用户可以访问我们的视图:
from django.urls import pathfrom . import viewsurlpatterns = [ path("posts/", views.post_list, name="post_list"), # 当用户访问/posts/时,显示博客文章列表]
以上就是在实际项目中使用Django模板的基本步骤。通过这个例子,我们可以看到Django模板系统的强大和灵活性,它可以帮助我们快速地创建动态的网页。
如有帮助,请多关注个人微信公众号:【Python全视角】TeahLead_KrisChang,10+年的互联网和人工智能从业经验,10年+技术和业务团队管理经验,同济软件工程本科,复旦工程管理硕士,阿里云认证云服务资深架构师,上亿营收AI产品业务负责人。
标签:
**本文首先介绍了Django模板系统的基础知识,接着探讨了如何安装和配置
2023-07-08【环球网报道】据韩国《朝鲜日报》7月8日报道,结束对日本访问的国际原
2023-07-08为扎实有序推进实施城市更新行动,住房城乡建设部昨天(7月7日)表示,
2023-07-08更新和维护不及时、内容安全保障和监督管理不到位……7月7日,惠州市人
2023-07-08”原来熊某某是派出所的“常客”多次因斗殴、打架、小偷小摸被带至派出
2023-07-08来自非盈利环境数据分析组织的科学家罗德表示,近期的全球平均气温升高
2023-07-08中国报告大厅2023年7月8日离子膜片碱价格最新走势监测显示:萍乡市立信
2023-07-08游戏中有各种各样的策略你需要知道。只有知道了策略,才能快速取得游戏
2023-07-08据央视新闻消息,改装车炸街行驶不仅扰乱交通秩序还严重影响市民群众工
2023-07-08新华社北京7月7日电(记者高敬)记者7日从生态环境部了解到,为进一步
2023-07-08当地时间7月7日,美国国防部负责政策事务的副部长科林·卡尔宣布,最新
2023-07-08没有人会否认,燃油车向新能源汽车转向是汽车工业诞生百余年以来最剧烈
2023-07-08前段时间,系列武侠大剧《金庸武侠世界》,即新版《射雕英雄传》,所正
2023-07-08小米手环怎么点亮屏幕1、首先打开手机上的小米运动,进入到小米运动首
2023-07-08ontinue的用法,continue这个问题很多朋友还不知道,来为大家解答以上
2023-07-08国米官方宣布,正式买断阿切尔比。据德转显示,买断费为350万欧。国米
2023-07-087月7日晚间,中国人民银行、国家金融监督管理总局、中国证监会共同发布
2023-07-07腾达建设公告,公司中标“台州市域铁路S2线土建施工IV标段”项目,中标
2023-07-07截至6月底香港官方外汇储备资产为4173亿美元---中新社香港7月7日电香港
2023-07-071、沈眉庄演员斓曦读音2、西安人都成了沈眉庄3、以上就是关于【沈眉庄
2023-07-07格隆汇7月7日丨兴业银锡(000426 SZ)公布,银漫矿业本次技改的主要项目
2023-07-07今天(7月7日)16时30分,我们将迎来小暑节气。俗话说“大暑小暑,上蒸
2023-07-07红米buds3怎么连接红米buds3怎样配对手机红米buds3连接手机教程:1 先
2023-07-07深入工业品纸箱厂了解企业发展情况为全面贯彻落实党的二十大精神,
2023-07-07时代变了,没想到向来以“工匠精神”文明的日系合资车企,都开始学自主
2023-07-072023年5月,我赴云南佤山沧源参加了“佤族摸你黑·傣族风情”创作活动
2023-07-07坚持尽力而为、量力而行,统筹推动既有建筑更新改造、城镇老旧小区改造
2023-07-07老罗是位奇人!负债9600万,直播2年反赚3亿。近日老罗创新最新进展,交
2023-07-07App7月7日消息,今天,国家发展改革委联合七家银行启动建立了投贷联动
2023-07-07联合出品:广东省药品监督管理局南方网粤学习客户端策划:杨丽莺许曼佳
2023-07-07(文 张家栋编辑 张广凯)日前,长城汽车正式发布2023年6月产销数据。
2023-07-07分析指出,ADP远超预期可能有三点,6月裁员放缓、劳动力囤积现象仍在,
2023-07-07智通财经APP获悉,天能动力(00819)逆市涨超4%,截至发稿,涨3 31%,报8
2023-07-07格隆汇7月7日丨有投资者向伟星股份002003002003SZ提问公司国际业务表现
2023-07-07中新网北京7月6日电(记者邢翀)中国外交部发言人汪文斌7月6日主持例行记
2023-07-07随着半年报业绩预告不断披露,市场热炒的AI产业链上市公司逐步进入业绩
2023-07-072023年宁波失业登记办理指南(条件+方式+入口)办理对象及条件在法定劳
2023-07-07韩国市民团体5日在首尔举行记者会,质疑国际原子能机构(IAEA)日前发
2023-07-07李玟姐姐李思林今日受访时表示,妹妹死因不是割脉,死因留待法医公布。
2023-07-07火影忍者手游花灯解谜第十关怎么过?相信很多玩家都还不太清楚这个第十
2023-07-07武当山茶跻身中国绿茶区域公用品牌20强---7月6日,第三届世界绿茶大会
2023-07-077月6日下午,在2023年世界人工智能大会“脑机智能与数字生命”主题论坛
2023-07-07近日,2023年5月份乘用车销量数据出炉,众车网行业监测数据表明:零跑C
2023-07-07一直以来,我国都是一个储蓄大国。其中,存款人数最多的,基本都是60岁
2023-07-07抄写作文网小编为大家提供描写边关的古诗有哪些8 有哪些边塞古诗词来供
2023-07-07来为大家解答以上问题。冰箱后面有点臭怎么回事,冰箱后面有臭味是什么
2023-07-07昨天在“火神”副热带高压的控制下,厦门迎来了流金铄石的酷暑天。气象
2023-07-06公告显示,经公司财务部门初步测算,农发种业预计2023年上半年实现归属
2023-07-066月美国私营部门就业人数经季节性调整后增加了49 7万人,为市场预期22
2023-07-06事实上,广州在今年上半年也出台了一些政策,如在今年“五一”前夕,南
2023-07-06步骤一:画兔子的头部在身体的顶部画一个圆形作为兔子的头部。头部像小
2023-07-06「公开排名」贵阳鼻炎哪个医院效果好?铭仁耳鼻喉怎么样?鼻炎是指鼻黏
2023-07-06观点网讯:7月6日,北京电子城高科技集团股份有限公司发布关于累计新增
2023-07-06台媒:李玟半年前患乳腺癌
2023-07-06作为挑战谷歌的“第一枪”,微软联合OpenAI的搜索业务近期呈现出了乏力
2023-07-067月6日,禾赛科技官微宣布获得上汽商用车板块多款车型前装项目定点,新
2023-07-06洪山区团结公园二期何时建成?最新消息来了位于洪山区团结大道与园林路
2023-07-067月6日“云南疾控”微信公众号发布《云南省组织实施有毒野生菌中毒风险
2023-07-06近日,云南省红河州“弥勒市—建水县旅游直通车”正式发车。据悉,此举
2023-07-067月5日晚,歌手李玟的家人通过社交媒体宣布,李玟于7月2日在家中轻生,
2023-07-06狂暴枪手在费城街头大开杀戒,五人丧生,两名儿童受伤,市长痛斥美国枪
2023-07-06过故人庄题目的意思,过故人庄诗句是什么意思这个很多人还不知道,现在
2023-07-06【深圳市高温黄色预警生效中】△深圳市气象局官网7月6日11时气温监测截
2023-07-067月5日,俄海军舰艇编队抵达上海!00:337月5日,由俄罗斯海军太平洋舰
2023-07-06为帮助更多家庭经济困难学子完成学业,三亚建立了国家助学金制度和学校
2023-07-06人民银行7月6日公告称,为维护银行体系流动性合理充裕,人民银行当日以
2023-07-06文 图羊城晚报全媒体记者梁怿韬广州市气象台在7月6日8时04分,对越秀、
2023-07-06入夏以来,江西省于都县市场监管局结合辖区实际,对特种设备使用单位开
2023-07-06图为香格里拉讲坛揭牌仪式。 石显尧 摄中新网迪庆7月6日电(记者缪超)
2023-07-06要走出漫漫长季,速度并不是唯一的解法。解读新商业的财经新媒体,报道
2023-07-06“固收+”基金全面“回血”部分公募趁机加大布局,公募,基金,股债,债基,
2023-07-06广发银行股份有限公司(以下简称“广发银行”)的开放式基金销售资格已
2023-07-06有些事或许会迟到,但它永远不会缺席,就如同我们今天测试宝马X328i车
2023-07-06中超联赛第14轮结束后,裁判成为了整个舆论关注的焦点,费莱尼的进球被
2023-07-061、厦门鼓浪屿,福州三坊七巷,泰宁大金湖、上清溪。2、永定土楼,南靖
2023-07-06第七章带着少女回家此刻的赢珺拿着枪打中正准备偷袭的人的手给打烂稍微
2023-07-061、朴泰桓,1989年9月27日出生于首尔,韩国男子游泳运动员。2、2006年
2023-07-05来为大家解答以上问题,方太售后服务热线952315,方太售后服务热线很多
2023-07-05央视网消息:据中央纪委国家监委,为深入推进乡村振兴领域不正之风和腐
2023-07-057月5日,以岭药业再次向河北省赞皇县慈善会捐赠20万元,资助当地小学、
2023-07-05SMM7月5日讯:因昨日下游临近交单,镁市成交向好,市场报价快速上行。
2023-07-051、《远古玄说》这是蛮荒时代,一个远古强者的回归,这是远古的人族与
2023-07-057月4日,首届中国学位与研究生教育大会暨中国研究生教育长江论坛在汉开
2023-07-05分享将安卓手机数据导入苹果手机的几种方法。可以选择使用iCloud、Goog
2023-07-057月5日电,大盘全天震荡调整,三大指数均小幅下跌。盘面上,稀土、有色
2023-07-05一、法院的强制执行是什么流程法院的强制执行流程是:第一步:申请发生
2023-07-051、李岳峰本人的图片2、李岳峰3、以上就是关于【李岳峰本人的图片李岳
2023-07-05一、浙江省衢州市天气预报1、江山市气象台2023年06月24日05时47分发布
2023-07-05让配料表更干净,成了玩家们的共同追求。
2023-07-05在菲律宾科隆北有一家超级适合一家老小的度假村,度假村堪称是潜水溜娃
2023-07-05想必现在有很多小伙伴对于游戏激活码如何获得方面的知识都比较想要了解
2023-07-05hello大家好,我是价值网小科来为大家解答以上问题,上帝是个女孩原唱
2023-07-057月2日下午4时许受对流天气短时强降雨影响杭州临安大鱼线河道水位猛涨
2023-07-051、拓扑是指将各种对象的位置表示为抽象位置。在网络中,拓扑形象地描
2023-07-051、宙斯盾战斗系统,正式编号是WeaponSystemMk7,是全世界第一种全数字
2023-07-05你们好,最近小品发现有诸多的小伙伴们对于六一儿童节图片简笔画儿童画
2023-07-05高澜股份7月4日在互动平台表示,公司在充电桩液冷方面有相关技术储备,
2023-07-051、厦门沙爹面沙爹面是厦门有名的小吃,属于闽菜。汤色红亮,味道咸辣
2023-07-05假面骑士geats中作为四骑的假面骑士buffa,其有关全新的马格南形态方面
2023-07-05hello大家好,我是城乡经济网小晟来为大家解答以上问题,腊月初一吃什
2023-07-05Copyright © 2015-2022 水产头条网版权所有 备案号:沪ICP备2022005074号-20 联系邮箱:58 55 97 3@qq.com