前端教程:Django模板系统

开课吧开课吧锤锤2021-08-10 16:14

Django能够单独分开Python和HTML,Python代码/变量进入视图和HTML模板。 连接这两个,Django依赖于渲染函数和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>

然后,我们的视图将改变为-  

def hello(request):
   today = datetime.datetime.now().date()
   return render(request, "hello.html", {"today" : today})

现在,我们将得到下面的输出在访问URL /myapp/hello 之后−

Hello World!!!
Today is Sept. 11, 2015 

正如你可能已经注意到,如果变量不是一个字符串,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>

在这个新的模板,根据当天的日期,该模板将呈现这个值。  

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})

该模板用来显示列表 {{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>

我们应该得到输出的内容如下 −  

Hello World!!!
Today is Sept. 11, 2015
We are I don't know.
Mon
Tue
Wed
Thu
Fri
Sat
Sun

块和扩展标签  

模板系统是不完整模板继承。当您设计模板的含义,子模板会根据自己的需要填写一个主模板,就像一个页面中所选选项卡可能需要一个特殊的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>

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 %}

在上面的示例, 在调用/myapp/hello,我们仍然会得到相同的结果和以前一样,但现在我们靠的是扩展,并不用重构代码。

在main_template.html我们定义使用标签块。标题栏块将包含页面标题,以及内容块将在页面主内容。在Home.html中使用扩展继承来自main_template.html,那么我们使用上面块定义(内容和标题)。  

注释标签  

注释标签用来模板定义注释,不是HTML注释,它们将不会出现在HTML页面。它可以是一个文件或只是注释一行代码。  

以上就是开课吧广场小编为大家整理发布的“前端教程:Django模板系统”一文,更多Web教程相关内容尽在开课吧广场Web教程频道!

免责声明:本站所提供的内容均来源于网友提供或网络搜集,由本站编辑整理,仅供个人研究、交流学习使用。如涉及版权问题,请联系本站管理员予以更改或删除。
有用
分享
全部评论快来秀出你的观点
登录 后可发表观点…
发表
暂无评论,快来抢沙发!
云开发实战特训营