Django模板系统

一、Django Template Language(DTL)

  • DTL 即 Django模板语言,Django 模板是一些文本字符串,作用是把文档的表现与数据区分开。模板定义一些占位符和基本的逻辑(模板标签),规定如何显示文档。通常,模板用于生成 HTML。
  • Django 1.8 还支持另一个流行的模板引擎,Jinja2。

二、使用Django模板

导入 Template 和 Context 类

from django.template import Template, Context

def hello_template(request):
   html = """
      
         
            第一个程序
         
         
            

{{content}}

""" # 1.构建模板结构 template_obj = Template(html) # 2.创建渲染结构 context_obj = Context({'content': '你好世界!!!'}) # 3. 进行数据渲染 result = template_obj.render(context_obj) # 4. 返回结果 return HttpResponse(result)
  • 提示:
    这样使用了模板系统,但是这没有解决我们在本章开头指出的问题,即模板仍然嵌在 Python 代码中,没有分离数据和表现。为了解决这个问题,我们要把模板放在单独的文件中,然后让视图加载。

将模板单独放置在文件中

1、模板加载机制
为了从文件系统中加载模板,首先要告诉框架模板的存储位置。这个位置在设置文件中配置,打开 settings.py 文件,找到 TEMPLATES 设置。

BACKEND 的值是指向实现 Django 模板引擎类。内置的后端有 django.template.backends.django.DjangoTemplates和
django.template.backends.jinja2.Jinja2。
因为多数引擎从文件中加载模板,所以各个引擎的顶层配置包含三个通用的设置:

  • DIRS 定义一个目录列表,模板引擎按顺序在里面查找模板源文件。
  • APP_DIRS 设定是否在安装的应用中查找模板。按约定,APPS_DIRS 设为 True 时,DjangoTemplates 会在INSTALLED_APPS 中的各个应用里查找名为“templates”的子目录。这样,即使 DIRS 为空,模板引擎还能查找应用模板。
  • OPTIONS 是一些针对后端的设置。
  • 注意:
    TEMPLATE_DIRS:

自1.8版本起,不赞成使用,在一个DjangoTemplates引擎中设置’DIRS’选项来代替

三、注释

与 HTML 和 Python 一样,Django 模板语言支持注释。
单行注释使用 {# #} 标明:
{# This is a comment #}
渲染模板时,不输出注释。使用这种句法编写的注释不能分成多行。这一限制有助于提升模板解析性能。
多行注释:使用 {% comment %} 模板标签,
如下所示:
{% comment %}
This is a
multi-line comment.
{% endcomment %}
注释标签不能嵌套。

四、Filters(过滤器)

在Django的模板语言中,通过使用 过滤器 来改变变量的显示。(注:过滤器是函数)
过滤器的语法: {{ 变量名|过滤器名称:参数 }}
使用管道符"|"来应用过滤器。
例如:{{ name|lower }}会将name变量应用lower过滤器之后再显示它的值。lower在这里的作用是将文本全都变成小写。
过滤器可以串接,即把一个过滤器的输出传给下一个过滤器。
例如:{{ msg|lower|upper }}
将msg变量内容先转换成小写然后再转换成大写。

  • default
    如果一个变量是false或者为空,使用给定的默认值。 否则,使用变量的值。
    {{ value|default:“nothing”}}
    如果value没有传值或者值为空的话就显示nothing

  • length
    返回值的长度,作用于字符串和列表。
    {{ value|length }}
    返回value的长度,如 value=[‘a’, ‘b’, ‘c’, ‘d’]的话,就显示4.

  • slice
    切片
    格式:{{value|slice:“2:-1”}}

  • date
    日期格式化过滤器
    格式:{{ value|date:“Y-m-d H:i:s”}}
    可用的参数 例如:a,A,b,B等在此不一一列举

  • safe
    Django的模板中会对HTML标签和JS等语法标签进行自动转义,原因显而易见,这样是为了安全。但是有的时候我们可能不希望这些HTML元素被转义,比如我们做一个内容管理系统,后台添加的文章中是经过修饰的,这些修饰可能是通过一个类似于FCKeditor编辑加注了HTML修饰符的文本,如果自动转义的话显示的就是保护HTML标签的源文件。为了在Django中关闭HTML的自动转义有两种方式,如果是一个单独的变量我们可以通过过滤器“|safe”的方式告诉Django这段代码是安全的不必转义。

    #比如:
    value = "点我"
    格式:{{ value|safe}}
    
  • cut
    移除value中所有的与给出的变量相同的字符串
    格式:{{ value|cut:’ ’ }},如果value为’i love you’,那么将输出’iloveyou’.

  • join
    使用拼接符连接列表,例如Python的str.join(list)
    格式: {{value|join:”_”}}

  • 注意事项:
    1.’:'左右没有空格
    2.django的模板语言中提供了大约六十个内置过滤器。

五、模板继承

  • 定义母版(base.html),在HTML的相同代码部分提取出来写到母版里边,代码:
    {% block main %}
    {% endblock %

  • 继承母版
    {% extends ‘base.html’ %}
    {% block main %}
    {% endblock %

你可能感兴趣的:(python)