多语言展示
当前在线:193今日阅读:91今日分享:37

Django模板系统

Django模板系统,主要内容如下:1.模板的标签2.模板的路径设置方法及如何加载模块3.在视图views中使用模板优化4.子模板的继承
工具/原料

Django

方法/步骤
1

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

2

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

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上的路径\\最好使用/来代替(当然不加后面的有时也不会有问题)

4

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

5

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

6

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

7

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

8

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

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 %} 的参数应该是字符串,但是如果直到运行时方能确定父模板名,这个参数也可以是个变量。这使得你能够实现一些很酷的动态功能。

注意事项

如果认为本经验对您有所帮助,请点击下面【投票】支持小编!如果您想以后随时浏览请点击下面的【收藏】,如果认为本经验能够帮助到您的朋友,请点击页面右边双箭头分享

推荐信息