Django模板标签

知识点:

  1. 基本概念

  2. 常用标签

  3. 模板标签例子

  4. 模板继承与应用

  5. 注释标签

模板标签

标签在渲染的过程中提供任意的逻辑。

这个定义是刻意模糊的。 例如,一个标签可以输出内容,作为控制结构,例如“if”语句或“for”循环从数据库中提取内容,甚至可以访问其他的模板标签。

Tags是由%}和 {% 来定义的,例如:{%tag%} {%endtag%}

大部分标签都接受参数。

常用标签

(1)if/elif/else:可以使用and/or/in/not/==/!=/<=/>=,来进行判断。ifequal/ifnotequal
(2)for…in…:跟python中的for…in…是一样的用法。
forloop.counter:当前迭代的次数,下标从1开始。
forloop.counter0:当前迭代的次数,下标从0开始。
forloop.revcounter:跟forloop.counter一样,下标从大到小。
forloop.revcounter0:跟forloop.counter0一样,下标从大到小。
forloop.first:返回bool类型,如果是第一次迭代,返回true,否则返回false。
forloop.last:返回bool类型,如果是最后一次迭代,返回True,否则返回False。
forloop.parentloop:如果发生多层for循环嵌套,那么这个变量返回的是上一层的for
(3)for…in…empty…:如果没有数据,跳转到empty中。
(4)load:加载第三方标签。最常用的是{%load static%}
(5)url:返回一个命名了的URL的绝对路径。
(6)with:缓存一个变量。
(7)autoescape:开启和关闭自动转义。
模板标签例子
# views.py
from django.shortcuts import render
​
def index33(request,name):
   return render(request, 'book/index33.html',
                 context={'test_name':name,
                          'list':ls,
                          'dict':dc,
                          'html': '<h1>hello django</h1>',
                          })
{# book/index33.html #}
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>hello</title>
</head>
<body>
  {% if name == "python" %}
      这是python页面噢噢噢噢
  {% elif name == "django"%}
      这是django的页面哈哈哈哈
  {% else %}
      哈哈哈 是{{ name }}的呢....
  {% endif %}
</body>
</html>
# for的使用
{% for i in list %}
  {% if forloop.counter0 == 0 %}
       <li>这是一个值:{{ i }}</li>
  {% else %}
          <li>{{ i }}</li>
  {% endif %}
{% endfor %}
# url 页面转换
​
# --------------url.py--------------
urlpatterns = [
   url(r'^test/$',views.test,name='test'),
   url(r'^index/([a-z]+)/$',views.index33),
   url(r'^new/(?P<aaa>\w+)/$',views.new,name='book_new'),
]
​
# --------------hello.html--------------
<a href="/book/test">test测试</a> <br>
<a href={% url 'test_alias' %}> test 页面</a>
<a href="{% url 'book_new' 'django' %}">new传参数</a>  <br>
​
# --------------views.py--------------
def test(request):
   return HttpResponse('test page!!!!!!!')
def new(request,aaa):
   return HttpResponse('这是新的页面')    
# with的使用
{% with test_name as tn  %}
   11111{{ tn }} <br>
   22222 {{ tn }} <br>
{% endwith %}
# autoescape的使用
原始的: {{ html }} <br>
过滤器方式: {{ html |safe }} <br>
标签方式:
{% autoescape off %}
  {{ html }} <br>
{% endautoescape %}
​

模板继承与引用

Django模版引擎中最强大也是最复杂的部分就是模版继承了。 模版继承可以让您创建一个基本的“骨架”模版,它包含您站点中的全部元素,并且可以定义能够被子模版覆盖的 blocks 。

继承:

模板继承使用extends标签实现。通过使用block来给子模板开放接口。

1、extends必须是模板中的第一个出现的标签。

2、子模板中的所有内容,必须出现在父模板定义好的block中,否则django将不会渲染。

3、如果出现重复代码,就应该考虑使用模板。

4、尽可能多的定义block,方便子模板实现更细的需求。

5、如果在某个block中,要使用父模板的内容,使用block.super获取。

引用

引用:include标签可以包含一个html模板到当前模板中。和继承不同,include是把html模板在此处展开。

例如:{% include ‘head.html’%}

例子:
{# templates/music/base.html#}   
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>{% block title %}这是默认标题{% endblock %}</title>
</head>
<body>
{% block content %}
  这是默认内容
{% endblock %}  
<br>
{% block demo %}
  这是默认演示
{% endblock %}
</body>
</html>
{# templates/music/ss.html#}
<!DOCTYPE html>
<html lang="en">
<head>
   <meta charset="UTF-8">
   <title>内容</title>
</head>
<body>
潭州教育Python学院 web开发django班
</body>
</html>
{# templates/music/index.html #}
{% extends 'music/base.html' %}
{% block title %}music主页{% endblock %}
{% block content %}
  这句是通过block.super继承父类的:{{ block.super }}<br>
  这是子模板自己的内容:没有写block就不会显示
{% endblock %}
{% block demo %}
  这是通过include引用的其他模板的内容:{% include 'music/ss.html' %}
{% endblock %}

注释标签

1、{#被注释的内容#}:将中间的内容注释掉。只能单行注释。
2、{comment}被注释的内容{endcomment}:可以多行注释。

练习案例:

for里面的例子:

路由文件

视图文件:路由指定的函数

Html文件:和最终结果浏览器里面做对比

最终效果:和以上html文件做对比

页面跳转:

效果(最下面):

路由文件:

视图文件:

Html文件:(两个链接,一个是传统的、一个是使用 url  模块的方法)

模板的继承,引用

路由文件:

视图文件:

base的Html 文件:

none的html文件:extends必须是模板中的第一个出现的标签。同时注意include标签。

qt的html文件:

最终效果:

DJango 基础 (4)的更多相关文章

  1. Python之路-(js正则表达式、前端页面的模板套用、Django基础)

    js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../  用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...

  2. Django 基础教程

    Django 基础教程 这是第一篇 Django 简介 »  Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...

  3. python的django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  4. Python学习(二十六)—— Django基础一

    转载自:http://www.cnblogs.com/liwenzhou/p/8258992.html 一.Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的 ...

  5. Django基础(一)

    Django基础(一) 知识预览 Django基本命令 二 路由配置系统(URLconf) 三 编写视图 四 Template 五 数据库与ORM admin的配置 一 什么是web框架? 框架,即f ...

  6. python3之Django基础篇

    一.Django基础 Django 是用Python开发的一个免费开源的Web框架,可以用于快速搭建高性能,优雅的网站! Django的特点: 强大的数据库功能:拥有强大的数据库操作接口(QueryS ...

  7. DJango 基础 (1)

    django基础 知识点: 基本认知 工具准备 新建项目 目录及文件说明 开发服务器 创建视图函数 新建应用(app) 1.基本认知 Django是用Python开发的一个免费开源的Web框架,可以用 ...

  8. Django基础和基本使用

    Django基础 Django是Python下的一款著名的Web框架 框架 任何语言进入到高级部分时,会有认证.session.http.连接数据库等等功能操作,没有框架时需要自己实现 框架 是整个或 ...

  9. {Django基础十之Form和ModelForm组件}一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 ModelForm

    Django基础十之Form和ModelForm组件 本节目录 一 Form介绍 二 Form常用字段和插件 三 From所有内置字段 四 字段校验 五 Hook钩子方法 六 进阶补充 七 Model ...

  10. {Django基础九之中间件} 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证

    Django基础九之中间件 本节目录 一 前戏 二 中间件介绍 三 自定义中间件 四 中间件的执行流程 五 中间件版登陆认证 六 xxx 七 xxx 八 xxx 一 前戏 我们在前面的课程中已经学会了 ...

随机推荐

  1. Gym - 100796I:Shell Game(圆台的最大内接球半径)

    pro:如题.给定上圆半径r,下圆半径R,高度h.问最大内接球半径. sol:由对称性,我们放到二维来看,即给这么一个梯形,问最大内接圆半径. 证明:如果是一个三角形的内接圆C,他内切于三边. 现在这 ...

  2. Python全栈之路---数据类型—字符串

    字符串:有序的字符的集合,用于存储和表示基本的文本信息,一对单.双.或三引号中间包含的内容称之为字符串 1.特性:有序,不可变(开辟新地址存储字符串,python解释器会定期清空不用了的已存储的) & ...

  3. Tarjan求割点&桥

    概念 1.桥:是存在于无向图中的这样的一条边,如果去掉这一条边,那么整张无向图会分为两部分,这样的一条边称为桥无向连通图中,如果删除某边后,图变成不连通,则称该边为桥. 2.割点:无向连通图中,如果删 ...

  4. VS2015 使用 Visual Studio Emulator For Android 调试无法命中断点的解决办法?

    源解决方案是英文版的,地址:https://dzone.com/articles/fix-for-could-not-connect-to-the-debugger-while-de 问题现象: 1. ...

  5. 计算:表中varchar类型的字段能容纳的最大字符数?

    建表语句: CREATE TABLE `test2` ( `id` int unsigned NOT NULL AUTO_INCREMENT, `content` varchar(21842) NOT ...

  6. HBase各版本对Hadoop版本的支持情况

    转载自:http://blog.csdn.net/sunny05296/article/details/54089194 安装HBase时,要考虑选择正确的Hadoop版本,否则可能出现不兼容的情况. ...

  7. Twitter的雪花算法(snowflake)自增ID

    前言 这个问题源自于,我想找一个分布式下的ID生成器. 这个最简单的方案是,数据库自增ID.为啥不用咧?有这么几点原因,一是,会依赖于数据库的具体实现,比如,mysql有自增,oracle没有,得用序 ...

  8. 管理工具:SWOT、PDCA、6W2H、SMART、WBS、时间管理

    01:SWOT分析法 Strengths:优势 Weaknesses:劣势 Opportunities:机会 Threats:威胁 意义:帮您清晰地把握全局,分析自己在资源方面的优势与劣势,把握环境提 ...

  9. [转]检测到有潜在危险的 Request.Form 值

    <system.web> <httpRuntime targetFramework="4.0" requestValidationMode="2.0&q ...

  10. 云存储的未来:Scale Up还是Scale Out?

      云存储的几十年发展历程,其计算架构模型,也从Scale Up走向Scale Out.但是展望未来数字世界的海量需求,目前流行的模型还能够持续满足吗?本文通过对云存储历史的回顾,及对Scale Up ...