网站首页 > 技术文章 正文
Django能够单独分开Python和HTML,Python代码/变量进入视图和HTML模板。 连接这两个,Django依赖于渲染函数和Django模板语言。
渲染函数
这个函数有三个参数 ?
请求?初始化请求
模板路径 ? 这是相对于在项目settings.py文件的变量到TEMPLATE_DIRS选项的路径。
参数字典 ? 字典包含所需的模板中的所有变量。这个变量可以创建或者可以使用 locals() 通过在视图中声明的所有局部变量。
Django模板语言(DTL)
Django模板引擎提供了一个小型的语言来定义应用程序面向用户的层。
显示变量
变量显示如下:{{variable}}. 模板由视图在渲染(render)函数的第三个参数发送的变量来替换变量。让我们改变hello.html显示当天的日期:
hello.html
<html>
<body>
Hello World!!!<p>Today is {{today}}</p>
</body>
</html>
1234567复制代码类型:[html]
然后,我们的视图将改变为-
def hello(request):
today = datetime.datetime.now().date()
return render(request, "hello.html", {"today" : today})
12345复制代码类型:[html]
现在,我们将得到下面的输出在访问URL /myapp/hello 之后?
Hello World!!!
Today is Sept. 11, 2015 12复制代码类型:[html]
正如你可能已经注意到,如果变量不是一个字符串,Django会使用__str__方法来显示它;并以同样的原则,你可以访问对象的属性,就像在Python中使用的一样。例如:如果我们想显示日期的年份,这里的变量是: {{today.year}}.
过滤器
它们可以帮助您显示修改的变量。过滤器的结构如下所示: {{var|filters}}.
一个简单的实例 ?
{{string|truncatewords:80}} ? 过滤器将截断字符串,所以只看到前80个字符。
{{string|lower}} ?转换字符为小写
{{string|escape|linebreaks}} ? 转义字符串内容,然后换行转换为标签。
还可以设置默认的变量。
标签
标签可以执行以下操作:if条件,for循环,模板继承以及更多。
if标签
就像在Python中,你可以使用if,else和elif在模板中 ?
<html>
<body>
Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}
the first day of month.
{% elif today == 30 %}
the last day of month.
{% else %}
I don't know.
{%endif%}
</body>
</html>
1234567891011121314151617181920复制代码类型:[html]
在这个新的模板,根据当天的日期,该模板将呈现这个值。
for标签
就像'if',我们有 'for' 标签,这些完全像在Python中一样使用它们。让我们改变 hello视图列表发送到我们的模板 ?
def hello(request):
today = datetime.datetime.now().date()
daysOfWeek = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
return render(request, "hello.html", {"today" : today, "days_of_week" : daysOfWeek})
1234567复制代码类型:[html]
该模板用来显示列表 {{for}}?
<html>
<body>
Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}
the first day of month.
{% elif today == 30 %}
the last day of month.
{% else %}
I don't know.
{%endif%}
<p>
{% for day in days_of_week %}
{{day}}
</p>
{% endfor %}
</body>
</html>12345678910111213141516171819202122232425复制代码类型:[html]
我们应该得到输出的内容如下 ?
Hello World!!!
Today is Sept. 11, 2015
We are I don't know.
Mon
Tue
Wed
Thu
Fri
Sat
Sun12345678910复制代码类型:[html]
块和扩展标签
模板系统是不完整模板继承。当您设计模板的含义,子模板会根据自己的需要填写一个主模板,就像一个页面中所选选项卡可能需要一个特殊的CSS。
让我们修改 hello.html 模板来从main_template.html继承。
main_template.html
<html>
<head>
<title>
{% block title %}Page Title{% endblock %}
</title>
</head>
<body>
{% block content %}
Body content
{% endblock %}
</body>
</html>
123456789101112131415复制代码类型:[html]
hello.html
{% extends "main_template.html" %}
{% block title %}My Hello Page{% endblock %}
{% block content %}
Hello World!!!<p>Today is {{today}}</p>
We are
{% if today.day == 1 %}
the first day of month.
{% elif today == 30 %}
the last day of month.
{% else %}
I don't know.
{%endif%}
<p>
{% for day in days_of_week %}
{{day}}
</p>
{% endfor %}
{% endblock %}
1234567891011121314151617181920212223242526复制代码类型:[html]
在上面的示例, 在调用/myapp/hello,我们仍然会得到相同的结果和以前一样,但现在我们靠的是扩展,并不用重构代码。
在main_template.html我们定义使用标签块。标题栏块将包含页面标题,以及内容块将在页面主内容。在Home.html中使用扩展继承来自main_template.html,那么我们使用上面块定义(内容和标题)。
注释标签
注释标签用来模板定义注释,不是HTML注释,它们将不会出现在HTML页面。它可以是一个文件或只是注释一行代码。
猜你喜欢
- 2024-09-24 前端小白如何在10分钟内打造一个爆款Web响应式登录界面?
- 2024-09-24 11套高端大气的登录模板
- 2024-09-24 这几本豆瓣高分前端好书,值得一读
- 2024-09-24 设计-前端设计尺寸与规范
- 2024-09-24 基于 Vue3 Element Plus 的中后台管理系统模板
- 2024-09-24 「前端」Bootstrap 网页模版 Laravel Angular Admin
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端md5加密 (49)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- 前端接口 (46)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- mac oracle (47)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)