Django模板

Django模板是MVC架构中的视图层(view),模板文件通常保存在ProjectDir下的templates目录下,以.html的格式存储。

模板视图函数作为控制器,将用户请求被处理后映射到相应视图并返回HttpResponse。

模板文件可以直接书写html代码以及脚本代码块,模板渲染引擎会将脚本渲染为html元素。

模板中除了html注释<!-- -->外,还有模板注释{# #}.html注释将会随HttpResponse返回客户端,而模板注释不会包含在HttpResponse中.

在views函数中调用render(request, template_name, context)函数渲染模板, 其中context为指定模板上下文的字典.

在模板中使用变量#

在模板使用双花括号"{{ }}"使用变量,变量将从context中取出并转换为字符串替换变量元素。如:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Hello</title>
</head>
<body>
    <p>{{ hello }}</p>
</body>
</html>

模板中的脚本元素#

模板中的脚本元素有3种:

if/elif/else/endif#

语法:

{% if condition1 %}
   display 1
{% elif condiiton2 %}
   display 2
{% else %}
   display 3
{% endif %}

根据条件来判断显示的内容,可以使用and,or和not运算符,变量将从上下文中寻找。

for#

for允许迭代某一对象,模板引擎将会渲染其中的内容

% for item in iterable %}
	<p>{{ item }}</p>
 {% endfor %}

示例:

   {% for item in a_list %}
        <p>{{ item }}</p>
    {% endfor %}

a_list必须从context中搜索,模板引擎不支持定义iterable。下列示例将产生语法错误:

  {% for item in ['1','2'] %}
        <p>{{ item }}</p>
    {% endfor %}

支持reversed关键字和嵌套使用:

% for item in iterable reversed %}

ifequal/ifnotequal#

类似{%if%}标签,但可方便的进行比较:

{% ifequal obj1 obj2 %}
   display 1
{% else %}
   display 3
{% endifequal %}

等价于:

{% if obj1 == obj2 %}
   display 1
{% else %}
   display 2
{% endif %}

类似地,有ifnotequal:

{% ifnotequal obj1 obj2 %}
   display 1
{% else %}
   display 2
{% endifnotequal %}

管道过滤器#

管道过滤器将上一个输出作为下一个过滤器的输入,通常最初的输出流是一个上下文中的对象:

{{ a_list|first|upper }}

上述示例中first过滤器首先取出a_list的首元素,然后由upper过滤器将其转化为大写。

include模板#

{% include 'included.html' %}标签允许在模板中包含其它的模板的内容。

模板继承#

模板可以通过继承来实现复用。首先编写base.html

<html>
  <head>
    <title>Hello World!</title>
  </head>

  <body>
    {% block mainbody %}
       <p>base</p>
    {% endblock %}
  </body>
</html>

{% block %}标签通知模板引擎,子模板可以重写这些部分。

{% extends "base.html" %}

{% block mainbody %}
	<p>extends base</p>
{% endblock %}
posted @   -Finley-  阅读(315)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
主题色彩