zoukankan      html  css  js  c++  java
  • django常用模板语言

    过滤器(Filters)

    filters来改变变量最终显示的值。

    过滤器就像这样{{ name|lower }}。这是将name变量通过lower过滤器全部转换为小写字母。|用来调用过滤器。

    过滤器可以是链式的,一个过滤器的输出会被用在下一个。{{ text|escape|linebreaks }} 是一种通用的形式用来将文本内容转义,然后再转为<P>标签以适用HTML。

    有些过滤器带参数。例如以下带参过滤器:{{ bio|truncatewords:30 }}意思是只展示bio变量的前30个字符。

    如果过滤器参数含有空格那么参数必须被引号引起来;比如想要用逗号和空格将list中的元素拼接起来,可以这样{{ list|join:“, ”}}。


    default

    如果一个变量是false或者是空的,那么它的值就是你给的默认值,否则就是变量本身的值。
    {{ value|default:"nothing" }}
    如果变量value没有提供,或者是空的话,上面就会显示nothing

    length

    返回变量的长度。这对于字符串和列表都起作用。比如:

    {{ value|length }}
    如果 value是一个列表['a','b','c','d'],那么输出就是4。

    filesizeformat

    将文件大小转换为符合人们阅读习惯的格式(如:‘13 KB’,‘4.1 MB’,‘102 bytes’等)

    {{ value|filesizeformat }}
    如果value是123456789的话,那么输出将会是117.7MB。

    标签

    标签的形式是 {% tag %}。标签比变量要更复杂:有些标签在输出中创建文本,有些通过展示循环和逻辑来控制流,有些引入额外的信息到模板中以供后续变量使用
     

    for

    循环遍历数组或列表,比如展示名为class_list的班级列表:

    <ul>
    {% for class in class_list %}
        <li>{{ class.name }}</li>
    {% endfor %}
    </ul>

    if,elif,else

    {% if mark >90 %}
        grade : '优秀'
    {% elif 60<mark<90 %}
        grade : '及格'
    {% else %}
        grade : '不及格'
    {% endif %}

    注意{% if  ***** %}要以{% endif %}来结束

     

    模板继承

    在Django模板引擎中最给力也是最复杂的部分就是模板继承。模板继承可以使你建立一个包含网站所有公共元素的基本骨架,在里面可以定义一些区块,模板的子模板可以重写这些区块。
    下面的例子可以让你更好的理解模板继承:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <link rel="stylesheet" href="style.css" />
        <title>{% block title %}My amazing site{% endblock %}</title>
    </head>
    
    <body>
        <div id="sidebar">
            {% block sidebar %}
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/blog/">Blog</a></li>
            </ul>
            {% endblock %}
        </div>
    
        <div id="content">
            {% block content %}{% endblock %}
        </div>
    </body>
    </html>

    这个模板我们将它取名为base.html,定义了一个简单的HTML骨架文档,在一个简单的两列布局的页面你也许会用到它。子模板要做的就是将内容填充到空的区块中。

    在这个例子中,标签block定义了三个可以让子模板重写的区块。每个block标签都会告诉模板引擎,子模板可能会重写该区块。

    下面我们定义了一个子模板:


    {% extends "base.html" %}
    
    {% block title %}My amazing blog{% endblock %}
    
    {% block content %}
    {% for entry in blog_entries %}
        <h2>{{ entry.title }}</h2>
        <p>{{ entry.body }}</p>
    {% endfor %}
    {% endblock %}

    其中关键的地方是extends标签,这可以告诉模板引擎该模板是继承于其他模板。这样当模板系统执行该模板时,就可以先定位他的父模板,上面模板的父模板就是“base.html”。

    在该例中,模板引擎会注意到在base.html中有三个block标签,然后会将子模板的内容填充到父模板相应的区块中。最后的结果如下({% block content %}区块里具体的内容是由blog_entries 变量决定的):

        <title>My amazing blog</title>
    </head>
    
    <body>
        <div id="sidebar">
            <ul>
                <li><a href="/">Home</a></li>
                <li><a href="/blog/">Blog</a></li>
            </ul>
        </div>
    
        <div id="content">
            <h2>Entry one</h2>
            <p>This is my first entry.</p>
    
            <h2>Entry two</h2>
            <p>This is my second entry.</p>
        </div>
    </body>
    </html>

    你可以根据需要采用多层继承,一般来讲我们采用的是三层继承:

    • 首先创建一个包含网站主体外观的基础模板base.html
    • 为每部分的网页创建名为base_部分名称.html的模板,比如,base_news.html,base_sports.html。这些模板都是继承base.html模板,并且都有自己的设计样式。
    • 为每一种类型的网页创建个性化模板,比如新闻或者博客,它们都是继承上述相应的部分模板
    使用继承要注意的地方
     
    • 如果你要在模板标签中使用{% extends %},那么它必须作为第一个模板标签,否则模板继承将失效。
    • 在你的基础模板中多使用{ % block % }。记住,在子模板中不一定都要重写父模板的block标签,所以你可以在父模板中多定义些block,在里面填充合理的默认值,这样在子模板中你可以根据需要重写相应的block,其他的使用父模板的默认值就可以了
    • 如果你发现在很多模板中有相同的内容,那么你可以将这些相同的内容提取出来放在父模板的block中。
    • 如果你想获取父模板block中的内容,你可以使用变量{{ block.super }}。如果你想要增加父模板block的内容,而不是重写它,那么这个变量将会非常有用。使用该变量插入的数据不会被自动转义(下面会提到),因为如果有必要的话它已经在父模板中被转以了。
    • 在{ % block % }标签外面用as标签创建的变量是无法在{ % block % }内部使用的,
                                          部分内容摘自http://www.jianshu.com/p/1664dcfd840c
     
     
     
     
  • 相关阅读:
    [语言基础] 我只想导入目标包中的一个模块,没想到目标包的其他非模块代码也被执行了。。
    [vscode] os.getcwd(),调试和命令行运行的结果不一致
    234. 回文链表
    不生成新数组的迭代器方法:forEach()&every()&some()&reduce()&reduceRight()
    合并数组并对数组排序
    为数组排序:sort()&reverse()
    从数组中间位置添加元素:unshift()方法的有一种运用
    从数组中删除元素:pop()&unshift()方法
    为数组添加元素:push()&unshift()方法
    由已有数组创建新数组:concat()&splice()方法
  • 原文地址:https://www.cnblogs.com/duGD/p/11218687.html
Copyright © 2011-2022 走看看