• 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 %}
  • 相关阅读:
    Kubernetes CNI 发展趋势- iptables_ipvs_bpf_ovs
    《设计模式:可复用面向对象软件的基础》之单例模式
    《设计模式:可复用面向对象软件的基础》之策略模式
    Rancher On K3s 高可用架构部署
    学习计算机的体会与认识
    结对编程1-模块化
    个人作业——APP案例分析
    四则运算——二叉树
    IDEA使用Visual Studio的快捷键配置
    【Java学习笔记】写第一个HelloWorld程序,命令行程序
  • 原文地址:https://www.cnblogs.com/Finley/p/5255577.html
Copyright © 2020-2023  润新知