Django 模板系统
Django使得将python代码和HTML代码分离成为可能,python代码放在视图中,HTML代码放在模板中。为了连接两者,Django依赖于render函数和Django模板语言。
render函数
这个函数接受三个参数 –
- Request - 初始请求。
-
模板路径 - 相对于项目中的settings.py变量中的TEMPLATE_DIRS选项的路径。
-
参数字典 - 一个包含模板中所有所需变量的字典。可以创建这个变量,或者可以使用locals()函数传递视图中声明的所有局部变量。
Django模板语言(DTL)
Django的模板引擎提供了一个迷你语言来定义应用程序的用户界面。
显示变量
变量的写法如下:{{variable}}。模板会将变量替换为视图在render函数的第三个参数中发送的变量。让我们修改我们的hello.html来显示今天的日期 –
hello.html
然后我们的视图将会变成:
我们现在访问URL /myapp/hello,将获取以下输出:
正如你可能已经注意到的那样,如果变量不是一个字符串,Django将使用str方法来显示它; 在相同的原则下,你可以像在Python中一样访问对象属性。例如:如果我们想要显示日期的年份,我的变量将是:{{today.year}}。
过滤器
它们帮助您在显示时修改变量。过滤器的结构如下:{{var|filters}}。
一些示例 −
- {{string|truncatewords:80}} −此过滤器将截断字符串,只能看到前80个单词。
-
{{string|lower}} −将字符串转换为小写。
-
{{string|escape|linebreaks}} −转义字符串内容,然后将换行符转换为标签。
您还可以为变量设置默认值。
标签
标签允许您执行以下操作:如果条件,for循环,模板继承等。
标签if
就像在Python中一样,在模板中可以使用if,else和elif-
在这个新的模板中,根据当天的日期,模板将渲染出一个特定的值。
标签 for
就像 ‘if’ 一样,我们也有 ‘for’ 标签,它的工作方式与 Python 中的一样。让我们修改我们的 hello 视图,将一个列表传递给我们的模板 –
使用{{ for }}来显示该列表的模板−
并且我们应该得到类似于-
块和扩展标签
一个模板系统如果没有模板继承,就不完整。这意味着在设计模板时,你应该有一个主模板,其中包含孩子模板根据自己的需要填充的空白处,比如页面可能需要一个特殊的CSS来选取选定的标签。
让我们将hello.html模板更改为继承main_template.html。
main_template.html
hello.html
在上面的例子中,当调用/myapp/hello时,我们仍然会得到与之前相同的结果,但现在我们依靠extends和block来重构我们的代码-
在main_template.html中,我们使用block标签定义块。标题块包含页面标题,内容块包含页面主要内容。在home.html中,我们使用extends从main_template.html继承,然后填充上述块(内容和标题)。
注释标签
注释标签用于在模板中定义注释,不是HTML注释,它们不会出现在HTML页面中。它可以用于文档或只是评论一行代码。