深入学习Django源码基础11 - 简要分析Django中template模块1

Django CMS 3 Beta 3 + Django 1.6 兼容部署实战指南 Django CMS 是基于 Django 构建的开源内容管理系统,其早期版本(如 3.0.0-beta3)与 Django 1.6 存在深度耦合关系,涉及 App Registry 初始化、中间件加载顺序、South 迁移机制等底层原理。这类组合虽已退出主流支持周期,但在遗留系统维护、金融/政务类老项目升级过渡、以及 Python 2.7 环境下的长期稳定运行场景中仍具现实技术价值。理解 Django 1.6 的应用注册机制与 CMS Beta 版本的源码直装逻辑,是解决 ImportError、AppR 阅读详情

首先逐个分析template目录下的文件

template
    |----loaders
        |----__init__.py
        |----app_directories.py
        |----cached.py
        |----eggs.py
        |----filesystem.py
    |----__init__.py
    |----base.py					模版,token,词法分析器,语法分析器,token解析,过滤表达式。变量,节点,节点列表,文本接点,变量节点,标签帮助节点,节点库
    |----context.py					内容类,渲染内容类,请求内容类(增加中间键过滤)
    |----debug.py					包装调试打印
    |----defaultfiters.py				过滤关键字
    |----defaulttags.py				标签关键字
    |----loader.py					模版加载公共方法
    |----loader_tags.py				包内容,包节点,扩展节点,包含接点,
    |----response.py				返回请求封装,模版返回封装类
    |----smartif.py					表达式过滤

实际使用过程中是这样
html代码
{% for story in story_list %}
<h2>
  <a href="{{ story.get_absolute_url }}">
    {{ story.headline|upper }}
  </a>
</h2>
<p>{{ story.tease|truncatewords:"100" }}</p>
{% endfor %}

后台

class PersonClass2:
...     def name(self):
...         return "Samantha"
>>> t = Template("My name is {{ person.name }}.")
>>> t.render(Context({"person": PersonClass2}))

from django.shortcuts import render_to_response
render_to_response('xxx.html', {})


通过分析可以得出
Template加载模版资源
通过词法分析器lexer拆分为词法列表
拆分以后的词法经过语法分析器。建立语法树。
渲染的过程为遍历语法树,将语法通过对应关键字方法和过滤方法。实现内容替换。

其中有3个关键过程。

1:词法解析

2:语法解析,建立语法树,执行语法关键字与内容替换。

3:渲染过程中,执行语法关键字与内容替换。


词法的解析在base.py中定义lexer类。重点为

# template syntax constants
BLOCK_TAG_START = '{%'
BLOCK_TAG_END = '%}'
VARIABLE_TAG_START = '{{'
VARIABLE_TAG_END = '}}'
COMMENT_TAG_START = '{#'
COMMENT_TAG_END = '#}'

# match a variable or block tag and capture the entire tag, including start/end
# delimiters
tag_re = (re.compile('(%s.*?%s|%s.*?%s|%s.*?%s)' %
          (re.escape(BLOCK_TAG_START), re.escape(BLOCK_TAG_END),
           re.escape(VARIABLE_TAG_START), re.escape(VARIABLE_TAG_END),
           re.escape(COMMENT_TAG_START), re.escape(COMMENT_TAG_END))))

正则的组合。也就是过滤 {{ }} {% %} {# #} 3种。

如果是变量类型,构造变量表达式节点。如果是block类型,构造block节点。

接下来看渲染的内容部分Context,其中主要是封装1个[{key:value}]列表。用来渲染时候索引值。


那么剩下的问题就是如何建立关键字和过滤。

Django+MongoDB+Spark电商分析流水线实战 在电商数据分析场景中,传统Django ORM与MongoDB组合难以支撑多维聚合、实时报表等分析型需求;PySpark作为分布式计算引擎,凭借惰性求值、DataFrame链式操作和弹性扩展能力,天然适配海量交易数据的清洗、关联与聚合。本文聚焦‘Django-MongoDB-Spark’技术栈协同架构,解析如何将原始订单文档经Spark批处理后固化为物化视图,再由Django高效查询展示,实现从原始数据到业务报表的生产就绪闭环。核心涵盖版本兼容性(PySpark 3.5.0 + MongoDB Connec 阅读详情

相关推荐

Django template使用Bootstrap实现分页功能

关于Django template自定义分页器功能实现 Bootstrap 源码地址:(https://github.com/thinksea/bootstrap-pagination) 下载源码:git clone https://github.com/thinksea/bootstrap-pagination或者用链接打开去下载zip。这个不再描述 或者 然后将code放在你自己想放的位置。我一般放在project下的static/文件下,如图: 3.然后在你的template/index.h

KinoJr 561

django之template

模板介绍 模板包含: HTML静态部分 动态插入内容部分: Django模板语言,简写DTL,不是纯正的js语言,定义在django.template包中,就是大括号 由startproject命令生成的settings.py定义关于模板的值: DIRS定义了一个目录列表,模板引擎按列表顺序搜索这些目录以查找模板源文件 APP_DIRS告诉模板引擎是否应该在每个已安装的应用中查找模板,方便迁...

processing 513

Django网络安全科普学习系统:毕设项目实战与源码解析

Web开发框架是构建现代网络应用的核心工具,其中Django以其高效、安全的特性成为Python开发者的首选。其MTV架构和ORM机制不仅提升了开发效率,更在数据库操作层面通过参数化查询等原理,为应用安全提供了基础保障。在网络安全领域,理解并防范SQL注入、XSS等常见漏洞是开发者的必备技能,这些安全技术的价值在于保护用户数据和系统完整性。将Django框架与网络安全知识结合,构建一个集知识科普、漏洞演示与防御实践于一体的学习系统,成为极具价值的工程实践项目。本文聚焦的Django网络安全科普学习系统,正是

weixin_30527323的博客 300

如何在Django中安全且完整的删除一个Model类(超详细!!!)

在Django项目中安全又完整的删除一个模型类(Model)

m0_49076971的博客 2743

Django详细的介绍

简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。由于Django在近年来的迅速发展,应用越来越广泛,被著名IT...

yuanlingGeGe的博客 4047

Django web开发指南 书中源码

Django web开发指南 书中源码,包含博客系统、照片廊系统、CMS内容管理系统、Google App Engine等等。

Python-Django 项目模块-年级模块开发-详情和删除(十)

Python-Django 项目模块-年级模块开发-详情和删除

口袋里的小龙的专栏 442

Django企业开发实战.源码

Django企业开发实战.源码

Django 中遇到的问题(1)TypeError: context must be a dict rather than Context.

1 . TypeError: context must be a dict rather than Context.翻译:上下文必须是一个字段,而不是一个Context实例对象 Django版本 1.11 报错的代码来自views.py:def current_datetime(request): now = datetime.datetime.now() t = get_t

大鹰的天空 2万+

django增删改查模块

django数据库记录前端增删改查,可以直接修改完善使用。

从TL431光耦到集成隔离器:3种反激电源反馈方案全对比,你的项目到底该选哪个?

本文深入对比了反激电源设计中TL431光耦、集成隔离器和原边反馈三种主流反馈方案的优缺点,帮助开发者在电源设计中选择最适合的方案。从精度、成本、隔离等级等多维度分析,为反激式(Flyback)拓扑的应用提供实用选型指南。

weixin_30536513的博客 399

Python—Django中的模板(template)

作者:BerenCamlost 目录作者:BerenCamlost1 定义模板1.1 变量在模板中调用方法 1 定义模板 1.1 变量 视图传递给模板的数据 要遵守标识符规则 语法 {{var}}(var代表变量) 【注意】:如果使用的变量不存在,则插入的是空字符串 在模板中使用点语法,点后边的东西按如下顺序进行匹配 字典查询 属性或者方法 数字索引 在模板中调用方法 sunck/mod...

BerenCamlost的博客 2190

PX4飞控神经网络控制:从仿真到嵌入式部署实战

神经网络控制正逐步革新传统PID在无人机领域的统治地位。通过将深度学习模型部署到PX4飞控硬件,实现了从传感器数据直接生成电机指令的端到端控制。这种架构依赖TensorFlow Lite Micro等轻量级推理框架,在STM32等嵌入式处理器上可达到93μs级推理速度。关键技术突破包括:基于NVIDIA Isaac Gym的高效仿真训练、模型量化压缩技术(如8位整数量化)、以及与PX4原生安全架构的无缝集成。该方案在mRobotics Pixracer Pro等硬件上验证了可行性,为无人机姿态控制、视觉导航

weixin_30570101的博客 403

django xadmin 模板的定制

django xadmin 模板的定制 编辑新增等页面对应的modelform为ModelFormAdminView (xadmin.views.edit.ModelFormAdminView)   通过源码分析,新增对象的template属性为add_form_template, 修改为change_form_template, 代码如下: 1 2 3 ...

xiguatony的博客 1779

【声纳与人工智能融合——从理论前沿到自主系统实战】第一章 声纳AI的数据基础:仿真、数据集与表征学习

该数据集的特点是包含了多种底质背景(沙地、泥地、碎石区)与噪声条件,适合验证模型的背景抑制能力。Urashima数据集由日本海洋研究开发机构(JAMSTEC)发布,基于自主水下航行器(AUV)采集,包含前视声纳序列数据,主要用于水下导航与避障算法评估,其数据包含了精确的姿态与深度标注,支持三维场景重建算法的训练。北约海洋研究与实验中心(CMRE)发布的CMRE datasets包含侧扫与合成孔径声纳数据,特别适用于跨传感器域自适应研究,数据集中包含了同一区域的多种声纳成像结果,为跨模态学习提供了基准。

u012133341的博客 103

EMC设计技巧及经验总结3:TVS的使用

Way back in undergrad circuits class(回到本科时的电路课程), our TA(助教) loved to give uslittle “black box” circuits. We’d measure the voltage and current characteristics, then have to determine what compone

snmplink的博客 2410

Django框架整理

Django是一个功能强大的web框架。 前言:框架模式简介 1、MVC和MTV框架模式:分层级进行管理 说到框架模式我们有必要简单的说下设计模式,了解下设计模式这个概念,因为有人对设计模式和框架模式的概念经常混淆 设计模式: 是一套被反复使用,多数人知道并经过分类的代码设计经验总结,是为了解决一些通用性问题的 目的:重用代码并保证代码的可靠性 设计模式分类:单例,抽象工厂 等等 23种模式 一句话总结:解

有用的话关个注,点个赞,收个藏🫶。 1713

CycloneDDS(C++版本)开源代码在Linux(X86平台)系统上编译生成可执行文件的详细步骤

cyclonedds里面已经有现成的实例供我们参考,在根目录下的example目录下面,我们打开此目录,此目录下有CMakeLists.txt文件以及一些其他的文档,我们需要在此目录(example目录)下编译构建出。我们可以看到cyclonedds-cxx-master包下的example目录下有很多文件,包括CMakeLists.txt等,其中我们要构建的可执行文件所需要的源文件等就在。此过程会稍微慢一点。之后会报错,如下:(图片中是c版本出现的问题截图,不影响,c++也是这个影响,问题是一样的)

qq_42595610的博客 1250

Django 2.0 官方中文文档终于发布啦! 附链接!

对于很多想从事学习Django Web开发的很多人而言,Django一直没有官方的中文文档是个弊端。而且Django更新较快,国内很多翻译版本都太滞后了。现在小编我告诉大家一个好消息!! Django 2.0 官方中文文档终于发布啦! 这无疑会进一步推动Python Web开发框架一哥Django在国内的普及和应用。为此小编我是真心高兴。如果你在学习Django框架,现在又多了个理由坚持下去...

大江狗 5万+

Python 爬虫实战:于好大夫在线抓取医生评价数据,选择优质医疗服务

requests:用于发送 HTTP 请求,获取网页内容。或 lxml:用于解析 HTML 页面,提取目标数据。pandas:用于数据清洗和分析。matplotlib和seaborn:用于数据可视化。time:用于控制爬取速度,避免对服务器造成压力。通过本项目,我们实现了以下目标:使用 Python 爬虫抓取好大夫在线的医生评价数据。对数据进行清洗和分析,找出评价中的关键词和趋势。根据分析结果推荐优质医疗服务。

u014481728的博客 3369

YOLO11改进 | 主干网络 | 添加Hyper-YOLO的MANet混合聚合网络

本文详细介绍了在YOLO11目标检测模型中替换C3k2模块为MANet的具体实现方法。文章首先讲解MANet模块的原理,然后分步骤指导如何在YOLO11中添加该模块,包括代码修改、文件配置和模型注册等关键环节。通过实验对比,改进后的YOLO11_MANet模型在保持8.8GFLOPs计算量的同时,参数数量达到3,820,272,网络层数增加到343层。文章还提供了完整的代码实现和网络结构图,并建议结合其他注意力机制或损失函数进一步提升检测效果。最后推荐了相关的深度学习专栏,包含更多YOLO系列改进方法。

kay_545 658

Django+MySQL网购数据可视化分析系统开发实战教程

数据可视化是将庞杂数据转化为直观图表的核心技术,在电商运营和商业分析中扮演关键角色。其实现原理通常涉及数据采集、存储、聚合计算与前端渲染四个环节。在Web开发领域,Django作为功能完备的Python框架,配合MySQL数据库,能够通过ORM高效完成数据建模与统计查询;而ECharts等图表库则负责将聚合结果动态呈现为折线图、饼图等可视化视图。这种技术组合在课程设计、毕业设计以及企业报表系统中均有广泛应用,既能帮助开发者理解后端数据处理流程,也能快速搭建出具有实用价值的分析看板。本文以网购数据为切入点,完

weixin_34176694的博客 421

RHCA ---RH442-4

这题考试中是没有的,但我做ex的判分脚本里做了,主要是lab环境swap只有512M的,这样后续改了某几个参数后会造成内存不够用导致异常.这里记得是双>,如果没自信的小伙伴可以在考试开始后第一时间把/etc/fstab先备份一个或者vi进入后手动敲一下。根据题意我们需要分2个768M的分区给swap。用free看swap大小是2.0Gi即可。留意红框中的内容即可,最后w保存退出。这个时候可以重启下机器。

Q先生 640

Django+MySQL数据可视化分析系统开发实战:从数据库到图表完整教程

数据可视化是数据分析流程中的关键环节,它通过图表化表达将数据库中的原始业务数据转化为直观的图表与仪表盘,帮助管理者快速理解销售趋势、分类占比与商品热度。在典型电商业务场景中,订单、商品和用户数据往往分散存储于MySQL等关系型数据库,需要后端框架完成数据聚合统计后,再交由前端图表库进行视觉呈现。Django作为Python生态中成熟的全栈Web框架,依托ORM机制与内置Admin后台,可以快速构建数据清洗、聚合查询与可视化接口,结合Chart.js这类轻量级图表库,即可高效完成从数据到图表的闭环。本文围绕一

weixin_34072458的博客 319

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

毕业设计实战:Python+Django+Vue构建舆情分析系统的工程化路径

数据工程是现代软件开发的核心领域之一,它涉及从异构数据源采集、清洗、存储到分析应用的全流程技术体系。其基本原理在于构建自动化、可扩展的数据流水线,将原始数据转化为有价值的业务洞察。在技术价值层面,一个健壮的数据工程架构能显著提升系统的可维护性、可观测性与处理效率,是应对数据规模增长与业务需求变化的基石。典型的应用场景包括网络舆情监控、用户行为分析和业务指标看板等,这些场景都要求系统能稳定处理非结构化文本数据,并实现实时或准实时的分析反馈。本文聚焦于网络舆情热点话题分析这一具体场景,深入探讨如何运用Pytho

weixin_33709609的博客 350

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

2. Django介绍

Django介绍 1. 简介 Django,发音为[`dʒæŋɡəʊ],是用python语言写的开源web开发框架,并遵循MVC设计。劳伦斯出版集团为了开发以新闻内容为主的网站,而开发出来了这个框架,于2005年7月在BSD许可证下发布。这个名称来源于比利时的爵士音乐家DjangoReinhardt,他是一个吉普赛人,主要以演奏吉它为主,还演奏过小提琴等。由于Django在近年来的迅速发展,应用越来越广泛,被著名IT开发杂志SDTimes评选为2013SDTimes100,位列"API、库和框架"分类第6

weixin_45451375的博客 533

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

上一篇: 深入学习Django源码基础10 - Django中http模块
下一篇: 深入学习Django源码基础12 - 简要分析Django中template模块2
watsy
博客等级 码龄19年 133粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值