博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
django常用模板语言
阅读量:5299 次
发布时间:2019-06-14

本文共 3010 字,大约阅读时间需要 10 分钟。

过滤器(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的班级列表:

    {% for class in class_list %}
  • {
    { class.name }}
  • {% endfor %}

 

if,elif,else

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

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

 

模板继承

在Django模板引擎中最给力也是最复杂的部分就是模板继承。模板继承可以使你建立一个包含网站所有公共元素的基本骨架,在里面可以定义一些区块,模板的子模板可以重写这些区块。
下面的例子可以让你更好的理解模板继承:
    
{% block title %}My amazing site{% endblock %}
{% block content %}{% endblock %}

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

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

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

{% extends "base.html" %}{% block title %}My amazing blog{% endblock %}{% block content %}{% for entry in blog_entries %}    

{
{ entry.title }}

{

{ entry.body }}

{% endfor %}{% endblock %}

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

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

My amazing blog    

Entry one

This is my first entry.

Entry two

This is my second entry.

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

  • 首先创建一个包含网站主体外观的基础模板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 % }内部使用的,
                                     
 部分内容摘自
 
 
 
 

转载于:https://www.cnblogs.com/duGD/p/11218687.html

你可能感兴趣的文章
跨线程调用窗体控件
查看>>
linq to sql 扩展方法
查看>>
241. Different Ways to Add Parentheses
查看>>
实验10 编写子程序 1.显示字符串
查看>>
Effect-Compiler Tool(fxc.exe)
查看>>
django中的缓存 单页面缓存,局部缓存,全站缓存 跨域问题的解决
查看>>
常见HTTP状态码(200、301、302、500等)
查看>>
Atiti.大企业病与小企业病 大公司病与小公司病
查看>>
处理器管理与进程调度
查看>>
解决随机数生成的坐标在对角线上的问题
查看>>
服务器ganglia安装
查看>>
回炉重造-基本规则之语言的理解
查看>>
查找字符串中出现最多的字符
查看>>
C++执行内存memcpy的效率测试
查看>>
Event Store框架探究
查看>>
部分STL_hanhan~
查看>>
16进制的简单运算(不同进制的计算,输入,输出)
查看>>
vue.js安装
查看>>
CUDA并行计算 | 线程模型与内存模型
查看>>
android JNI库实现reboot,recovery
查看>>