`

django(3)内建标签

 
阅读更多

base.html

 

<html>
<head>
  <title>{% block title %} 默认,不使用标签不变 {% endblock %} - Test</title>
</head>
<body>
<p>
{% block content %}
同上
{% endblock %}
</p>
</body>
{% include 'foot.html' %}
</html>
 这样使用basehtml

 

 

{% extends 'base.html' %}
{% block title %} {{title}} {% endblock %}

{% block content %}
hello word!i am {{user.name}},my age is {{user.age}}!!
<br />
my friend name is {{person.name}},age is {{person.age}}!!
<br />
lessons:<br />

<table border="1">
{% for ll in li %}
<tr class="{%cycle 'row1' 'row2' %}">
<td>{{ll}}</td>
</tr>
{% endfor %}
</table>
{% endblock %}
 

 

源文件

<html>
<head>
  <title> hello world  - Test</title>
</head>




<body>
<p>
 
hello word!i am xiaoming,my age is 12!!
<br />
my friend name is xx,age is 3!!
<br />
lessons:<br />
<table border="1">
<tr class="row1">
<td>p</td>
</tr>
<tr class="row2">
<td>a</td>
</tr>

<tr class="row1">
<td>aaaa</td>
</tr>
<tr class="row2">
<td>asdasdas</td>
</tr>
<tr class="row1">
<td>12121</td>
</tr>
</table>

</p>
</body>
</html>

 

block

定义一个子模板可以覆盖的块,在模板中(上一节)有使用示例

comment

注释,{% comment %} 和 {% endcomment %}之间的内容被解释为注释

crsf_token

一个防止CSRF攻击(跨站点请求伪造)的标签

cycle

循环给出的字符串或者变量,可以混用

{% for o in some_list %}
    <tr class="{% cycle 'row1' 'row2 'row3' %}">
        ...
    </tr>
{% endfor %}

值得注意的是,这里的变量的值默认不是自动转义的,要么你相信你的变量,要么你就是用强制转义的方法,

{% for o in some_list %}
    <tr class="{% filter force_escape %}{% cycle rowvalue1 rowvalue2 %}{% endfilter %}">
        ...
    </tr>
{% endfor %}

在某些情况下,你可能想循环外部引用循环的下一个值,这时你需要用as给cycle标签一个名字,这个名字代表的是当前循环的值,但你可以在cycle标签里面是用这个变量来获得循环的下一个值

 
<tr>
    <td class="{% cycle 'row1' 'row2' as rowcolors %}">...</td>
    <td class="{{ rowcolors }}">...</td>
</tr>
<tr>
    <td class="{% cycle rowcolors %}">...</td>
    <td class="{{ rowcolors }}">...</td>
</tr>
 

渲染的结果是

 
<tr>
    <td class="row1">...</td>
    <td class="row1">...</td>
</tr>
<tr>
    <td class="row2">...</td>
    <td class="row2">...</td>
</tr>
 

但是cycle标签一旦定义,默认就会用循环的第一个值,当你仅仅是想定义一个循环,而不想打印循环的值的时候(比如你在父模板定义变量以方便继承),你可以是用cycle的silent参数(必须保证silent是cycle的最后一个参数,并且silent也具有继承的特点,尽管第二行的cycle没有silent参数,但由于rowcoclors是前面定义的且包含silent参数的,第二个cycle也具有silent 循环的特点

{% cycle 'row1' 'row2' as rowcolors silent %}
{% cycle rowcolors %}

extends

表示说当前模板继承了一个父模板

接受一个包含父模板名字的变量或者字符串常量

filter

通过可用的过滤器过滤内容,过滤器之间还可以相互(调用)

{% filter force_escape|lower %}
    This text will be HTML-escaped, and will appear in all lowercase.
{% endfilter %}

firstof

返回列表中第一个可用(非False)的变量或者字符串,注意的是firstof中的变量非自动转义

{% firstof var1 var2 var3 "fallback value" %}

for

for循环,可以在后面加入reversed参数遍历逆序的列表

{% for obj in list reversed %

你还可以根据列表的数据来写for语句,例如对于字典类型的数据

{% for key, value in data.items %}
    {{ key }}: {{ value }}
{% endfor %}

for循环还有一系列有用的变量

变量  描述
forloop.counter 当前循环的索引,从1开始
forloop.counter0 当前循环的索引,从0开始
forloop.revcounter 当前循环的索引(从后面算起),从1开始
forloop.revcounter0 当前循环的索引(从后面算起),从0开始
forloop.first 如果这是第一次循环返回真
forloop.last 如果这是最后一次循环返回真
forloop.parentloop 如果是嵌套循环,指的是外一层循环

for...empty

如果for循环的参数-列表为空,将执行empty里面的内容

 
<ul>
{% for athlete in athlete_list %}
    <li>{{ athlete.name }}</li>
{% empty %}
    <li>Sorry, no athlete in this list!</li>
{% endfor %}
<ul>
 

if

条件语句

 
{% if athlete_list %}
    Number of athletes: {{ athlete_list|length }}
{% elif athlete_in_locker_room_list %}
    Athletes should be out of the locker room soon!
{% else %}
    No athletes.
{% endif %}
 

布尔操作符

在if标签里面可以使用and,or和not三个布尔操作符

==,!=,<,>,<=,>=,in,not in等操作符

这些操作符就不一一详细说了,一目了然

在if标签里面,这些操作符可以做成复杂的表达式

ifchange

检测一个值在循环的最后有没有改变

所以这个标签实在循环里面是用的,有两个用法:

  • 没有接受参数时,比较的是ifchange标签里面的内容相比以前是否有变化,有变化时生效
  • 接受一个或以上各参数的时候,如果有一个或者以上的参数发生变化时,有变化时生效

ifchange可以有else标签

 
{% for match in matches %}
    <div style="background-color:
        {% ifchanged match.ballot_id %}
            {% cycle "red" "blue" %}
        {% else %}
            grey
        {% endifchanged %}
    ">{{ match }}</div>
{% endfor %}
 

ifequal

仅当两个参数相等的时候输出块的内容,可以配合else输出

{% ifequal user.username "adrian" %}
    ...
{% endifequal %}

ifnotequal

跟ifequal类似

include

加载一个模板并用当前上下文(include该模板的模板的上下文)渲染它,接受一个变量或者字符串参数

当然你也可以在include的时候传递一些参数进来

{% include "name_snippet.html" with person="Jane" greeting="Hello" %}

如果你只想接受传递的参数,不接受当前模板的上下文时,你可以是用only参数

{% include "name_snippet.html" with greeting="Hi" only %}

load

加载一个自定义的模板标签集合,见单独的一节讲解

now

显示当前的时间日期,接受格式化字符串的参数

It is {% now "jS F Y H:i" %}

参数有已经定义好的一些参考参数: DATE_FORMAT(月日DATETIME_FORMAT(月日年时),SHORT_DATE_FORMAT(月/日/ or SHORT_DATETIME_FORMAT(月/日/年/时)

regroup

通过共同的属性对一个列表的相似对象重新分组,加入你有一个城市(city)的列表如下

 
cities = [
    {'name': 'Mumbai', 'population': '19,000,000', 'country': 'India'},
    {'name': 'Calcutta', 'population': '15,000,000', 'country': 'India'},
    {'name': 'New York', 'population': '20,000,000', 'country': 'USA'},
    {'name': 'Chicago', 'population': '7,000,000', 'country': 'USA'},
    {'name': 'Tokyo', 'population': '33,000,000', 'country': 'Japan'},
]
 

你想按照国家country这个属性来重新分组已得到下面的结果,那么你可以这么做

  • India
    • Mumbai: 19,000,000
    • Calcutta: 15,000,000
  • USA
    • New York: 20,000,000
    • Chicago: 7,000,000
  • Japan
    • Tokyo: 33,000,000
 
{% regroup cities by country as country_list %}

<ul>
{% for country in country_list %}
    <li>{{ country.grouper }}
    <ul>
        {% for item in country.list %}
          <li>{{ item.name }}: {{ item.population }}</li>
        {% endfor %}
    </ul>
    </li>
{% endfor %}
</ul>
 

值得注意的是,regroup并不会重新排序,所以,请确保city在regroup之前已经按country排好序,否则将得不到你预期想要的结果,如果不确定可以用dictsort过滤器排序

{% regroup cities|dictsort:"country" by country as country_list %}

spaceless

移除html标签之间的空格,注意是标签之间的空格,标签与内容之间的空格不会被删除

{% spaceless %}
    <p>
        <a href="foo/">Foo</a>
    </p>
{% endspaceless %}

结果是

<p><a href="foo/">Foo</a></p>

ssi

在页面上输出给定文件的内容

{% ssi /home/html/ljworld.com/includes/right_generic.html %}

使用parsed参数可以使得输入的内容可以作为一个模板从而可以使用当前模板的上下文

{% ssi /home/html/ljworld.com/includes/right_generic.html parsed %}

url

返回一个绝对路径的引用(没有域名的url),接受的第一个参数是一个视图函数的名字,然后从urls配置文件里面找到那个视图函数对应的url,

widthratio

这个标签计算给定值与最大值的比率,然后把这个比率与一个常数相乘,返回最终的结果

<img src="bar.gif" height="10" width="{% widthratio this_value max_value 100 %}" />

with

 用更简单的变量名缓存复杂的变量名

{% with total=business.employees.count %}
    {{ total }} employee{{ total|pluralize }}
{% endwith %}

尽管初衷是这样,但你不必都是如此,哈哈

{% with alpha=1 beta=2 %}
    ...
{% endwith %}
分享到:
评论

相关推荐

    django框架学习笔记

    12. **测试**:Django内建测试框架,方便编写和执行单元测试和集成测试,确保代码质量。 13. **部署**:学习如何将Django项目部署到生产环境,如使用Gunicorn、Nginx等服务器。 根据提供的压缩包文件名称,我们...

    Python Django建站教程源代码《玩转Django2.0》配套全部源码 共13个章节 含目录内容.rar

    第1章 Django建站基础 1 1.1 网站的定义及组成 1 1.2 网站的分类 3 1.3 网站运行原理及开发流程 5 1.4 走进Django 6 1.5 Django 2.0的新特性 7 1.6 安装Django 8 1.7 创建项目 9 1.8 PyCharm搭建开发环境 12 1.9 本...

    Django 中文文档

    4. 模板层(Template Layer):包括模板的基础知识,面向设计师和程序员的模板语言,内建标签和过滤器的使用,自定义标签和过滤器的创建,以及国际化和本地化的设计。 5. 表单层(Forms Layer):介绍了表单的基础...

    精通Django.Django 1.8 LTS全解.pdf

    10. **测试与调试**:Django内建了全面的测试框架,支持单元测试、集成测试和功能测试。此外,它还有强大的错误报告和调试工具,帮助开发者找出并修复问题。 11. **Django LTS**:长期支持版本(LTS)保证了在一段...

    python建站django框架的简单学习代码

    这个“python建站django框架的简单学习代码”压缩包提供了学习Django的基础知识,包括文件上传、用户登录和注销等核心功能。下面我们将深入探讨这些知识点。 首先,让我们了解Django框架。Django是用Python编写的...

    Django -1.11.6下载

    5. 内建身份验证和授权:Django自带了用户认证系统,包括注册、登录、权限和组管理,为开发者处理用户身份验证和授权提供了便捷。 6. 表单和模型表单:Django的表单系统使得创建和处理HTML表单变得简单,模型表单则...

    Django1.8.4

    Django 1.8.4增强了模板语言,支持更多的内建标签和过滤器,提高了模板的可读性和可维护性。同时,对模板错误的处理也更为友好,提供更清晰的错误信息。 3. **视图(Views)**:视图是Django处理HTTP请求并返回响应...

    django-chinese-docs pdf

    - **内建标签和过滤器**:列出Django模板系统自带的所有标签和过滤器。 - **模板API**:提供Django模板API的详细说明,包括如何自定义标签和过滤器。 - **面向程序员**:从程序员的角度出发,讲解如何利用Django模板...

    django2.1官方文档

    7. **认证与授权**:Django内建了强大的用户认证系统,包括用户注册、登录、密码管理等功能。同时,权限和组的概念使得对用户访问控制变得简单。文档还介绍了如何实现自定义认证后端。 8. **中间件**:Django的...

    基于Django的股票展示系统

    5. **模板标签和过滤器**:在模板中,可以使用内建标签和过滤器处理数据,例如遍历股票列表,格式化货币值,或根据条件展示内容。 6. **用户界面**:设计一个直观的用户界面,展示股票信息,可能包括股票搜索、图表...

    django1.8教程

    在Django中,模板不仅仅是HTML代码,它还能够集成内建标签和过滤器,以及自定义标签和过滤器来扩展模板的功能。本部分同样向设计师介绍了模板语言的基本概念,以帮助他们在设计过程中更好地理解模板层。 表单在Web...

    Django Documentation.pdf

    Django的后台管理功能是一个内建的管理平台,允许开发者快速创建数据库的管理界面。文档中讲解了如何配置和定制后台管理界面,使得管理人员可以方便地管理网站内容。 ### 安全(Security) 安全性是Web开发中不可...

    django从入门到深入WEB教程

    第一章 Django介绍 第二章 让我们开始吧 第三章 动态页面基础 第四章 Django的模板系统 ...附录F 内建的模板标签和过滤器 附录G Django管理实用工具 附录H HTTP请求(Request)和回应(Response)对象

    The Django Book 2.0中文版

    国际化和本地化是Django框架中处理多语言网站不可或缺的一部分,Django通过内建的国际化框架帮助开发者轻松地将应用翻译成多种语言。缓存机制是另一个高级概念,它可以帮助开发者提升网站性能,通过减少对数据库和...

    django1.3官方文档英文html版

    7. **用户认证和权限**:Django内建的认证系统支持用户注册、登录、权限检查等功能。理解User模型、Group模型以及如何使用装饰器或检查器进行权限控制。 8. **中间件**:中间件是Django中一种全局的响应和请求处理...

    django开发中文版资料

    - **内建标签和过滤器**:列出预置的模板标签和过滤器。 - **人性化**:介绍如何让模板更具人性化的提示。 - **面向程序员**:涉及更高级的模板定制技术。 - **模板API**:详细介绍模板系统的API。 #### 第4...

    The Django Book(第一版 中文高清版)

    附录部分也包含了一系列实用资源,如案例学习、数据模型定义参考、数据库API参考、通用视图参考、配置参考、内建的模板标签和过滤器,以及Django管理实用工具和HTTP请求和回应对象的参考信息。 整本书籍的知识点...

    Python-生成Django密钥

    4. **模板标签的内建函数**:SECRET_KEY也用于一些内建模板标签,如`{% csrf_token %}`,确保表单提交的安全性。 **如何生成Django密钥** 生成Django密钥通常使用Python的随机字符串生成工具。下面是一种常见的生成...

    Django Web框架 v3.2.25.zip

    "模板建站"表明Django可以用于快速构建网站,它的模板系统使得开发者可以专注于内容和布局,而不用过于关心HTML的细节。模板语言支持条件语句、循环、继承和包括,使得创建复杂的页面结构变得简单。 "系统软件工具...

    django2.0 安装包

    对于 Python 3.x,可以使用内建的 `venv` 模块: ```bash python3 -m venv myenv source myenv/bin/activate ``` ### 2. 安装 Django 在激活的虚拟环境中,使用 `pip` 来安装 Django 2.0: ```bash pip install ...

Global site tag (gtag.js) - Google Analytics