码迷,mamicode.com
首页 > 编程语言 > 详细

django常用模板语言

时间:2019-07-20 18:42:06      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:lin   外观   home   nothing   als   注意   取出   告诉   展示   

过滤器(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
 
 
 
 

django常用模板语言

标签:lin   外观   home   nothing   als   注意   取出   告诉   展示   

原文地址:https://www.cnblogs.com/duGD/p/11218687.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!