Django模板系统

2025-06-07 18:53:30

1、模板(Template)的标签(Tag):Template Tags一般格式是{{ Tag }}.例如一个网页上某处的标签是:{{ current_datetime }},这个current_datetime就是Tag的文字描述(通过模板显示出其相应的内容--值)。

Django模板系统

2、当然,创建django项目的时候需要你创建一个Templates文件夹来安放你的*.html模板文件。

Django模板系统

3、模板锭缠愁颊路径设置为了减少模板加载调用过程及模板本身的冗余代码,Django提供了一种使用方便且功能强大的API,用于从磁盘中加载模板,要使用此模板加载API,首先你必须将模板的保存位置告诉框架。该剐疫柩缓项工作在设置文件中完成。怎么查找到模板文件,就需要在settings.py中设置模板路径(默认的settings.py有BASE_DIR,所以仅需要使用BASE_DIR来查找templates即可,'DIRS': ( os.path.join(BASE_DIR, 'templates').replace('\\','/'),),)。如下图:注意:1)DIRS最好使用tuple来设置,但是作为单元素记得后面需要带,的 也可使用列表的方式2)BASE_DIR在Windows上的路径\\最好使用/来代替(当然不加后面的有时也不会有问题)

Django模板系统
Django模板系统

4、如何加载模块,可以使用函数django.template.loader.get_template()。通过上面的路径设置,就可以在文件系统中找出模块的位置。对于views.py的修改编辑如下:如果templates下面有子模板文件夹,只需要将下图的current_datetime.html前面加上子模板文件夹的名字+"/"+子模板名字即可,如图:

Django模板系统
Django模板系统

5、优化:由于加载模板、填充context、将经解析的模板结果返回为HttpResponse对象这一系列操作实在太常用了,Django提供了一条仅用一行代码就完成所有这些工作的捷径。该捷径就是位于django.shortcuts模块中名为render_to_response()的函数。如图:

Django模板系统

6、下图就是在cmd命令下运行python manage.py runserver,在URL中输入http://127.0.0.1:8000/time/之后显示的页面。

Django模板系统

7、关于模板是可以继承的:模板继承就是先构造一个基础框架模板(base.html),而后在其子模板中对它所包含站点公用部分和定义块进行重载。其中base.html下图为一个简单的base.html:注意:所有的{%block%}标签告诉模板引擎,子模板可以重载这些部分。

Django模板系统

8、现在我们已经有了一个基本模板,我们可以修改current_datetime.html模板来使用它,如图:注意:1)在加载current_datetime.html模板时,模板引擎发现了{%extends%}标签,注意到该模板是一个子模板。2)子模板没有定义的部分,系统将使用在父模板中定义的值。如图:

Django模板系统
Django模板系统

9、备注:下面描述来着网络使用继承的一种常见方式是下面的三层法:1.创建base.html模板,在其中定义站点的主要外观感受。这些都是不常修改畹晗掇工甚至从不修改的部分。2.为网站的每个区域创建base_SECTION.html模板(例如,base_photos.html和base_forum.html)。这些模板对base.html进行拓展,并包含区域特定的风格与设计。3.为每种类型的页面创建独立的模板,例如论坛页面或者图片库。这些模板拓展相应的区域模板。这个方法可最大限度地重用代码,并使得向公共区域(如区域级的导航)添加内容成为一件轻松的工作。以下是使用模板继承的一些诀窍:§如果在模板中使用{%extends%},必须保证其为模板中的第一个模板标记。否则,模板继承将不起作用。§一般来说,基础模板中的{%block%}标签越多越好。记住,子模板不必定义父模板中所有的代码块,因此你可以用合理的缺省值对一些代码块进行填充,然后只对子模板所需的代码块进行(重)定义。俗话说,钩子越多越好。§如果发觉自己在多个模板之间拷贝代码,你应该考虑将该代码段放置到父模板的某个{%block%}中。§如果需要获得父模板中代码块的内容,可以使用{{block.super}}变量。如果只想在上级代码块基础上添加内容,而不是全部重载,该变量就显得非常有用了。§不可同一个模板中定义多个同名的{%block%}。存在这样的限制是因为block标签的工作方式是双向的。也就是说,block标签不仅挖了一个要填的坑,也定义了在父模板中这个坑所填充的内容。如果模板中出现了两个相同名称的{%block%}标签,父模板将无从得知要使用哪个块的内容。§{%extends%}对所传入模板名称使用的加载方法和get_template()相同。也就数说,会将模板名称被添加到TEMPLATE_DIRS设置之后。§多数情况下,{%extends%}的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量。这使得你能够实现一些很酷的动态功能。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢