经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Django » 查看文章
Django框架模板语言实例小结【变量,标签,过滤器,继承,html转义】
来源:jb51  时间:2019/5/24 9:54:39  对本文有异议

本文实例讲述了Django框架模板语言。分享给大家供大家参考,具体如下:

模板语言

模板语言简称为DTL(Django Template Language)

模板变量

模板变量名由数字,字母,下划线和点组成,不能以下划线开头。
使用:{{模板变量名}}

  1. def index2(request):
  2. '''模板加载顺序'''
  3. return render(request, 'booktest/index2.html')
  4. # /temp_var
  5. def temp_var(request):
  6. '''模板变量'''
  7. my_dict = {'title': '字典键值'}
  8. my_list = [1, 2, 3]
  9. book = BookInfo.objects.get(id=1)
  10. #定义模板上下文
  11. context={'my_dict':my_dict,'my_list':my_list,'book':book}
  12. return render(request,'booktest/temp_var.html',context)
  13.  

模板变量可以是字典,列表或者对象。定义好模板上下文之后,用render()函数传递给html

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>模板变量</title>
  6. </head>
  7. <body>
  8. 使用字典属性:{{ my_dict.title }}
  9. 使用列表元素:{{ my_list.1 }}
  10. 使用对象属性:{{ book.btitle }}
  11. </body>
  12. </html>
  13.  

可以看到模板变量都是通过 . 调用的。

模板标签

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>模板标签</title>
  6. <style>
  7. .red{
  8. background-color: red;
  9. }
  10. .yellow{
  11. background-color: yellow;
  12. }
  13. .green{
  14. background-color: green;
  15. }
  16. </style>
  17. </head>
  18. <body>
  19. <ul>
  20. {% for book in books %}
  21. {% if book.id <= 2 %}
  22. <li class="red">{{ forloop.counter }}--{{ book.btitle }}</li>
  23. {% elif book.id >= 5 %}
  24. <li class="yellow">{{ forloop.counter }}--{{ book.btitle }}</li>
  25. {% else %}
  26. <li class="green">{{ forloop.counter }}--{{ book.btitle }}</li>
  27. {% endif %}
  28. {% endfor %}
  29. </ul>
  30. </body>
  31. </html>
  32.  

具体的其他的模板标签可以参考Django官方文档。

过滤器

过滤器用于对模板变量进行操作

date:改变日期的显示格式
length:求长度,字符串,列表,元祖,字典
default:设置模板变量的默认值

格式:模板变量 | 过滤器:参数

date过滤器

  1. <li class="red">{{ book.btitle }}--{book.bpub_date | date:'Y年-m月-d日'}</li>
  2.  

default过滤器 {{dd | default:'无'}}

模板注释

单行注释:{# 注释 #}

多行注释:{% comment %}

模板继承

不同页面可能有相同的模块,这时候可以使用模板继承减少代码量

base.html内容

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>父模板</title>
  6. </head>
  7. <body>
  8. <h1>导航条</h1>
  9. {% block b1 %}
  10. <h1>这是父模板b1块中的内容</h1>
  11. {% endblock b1 %}
  12. <h1>版权信息</h1>
  13. </body>
  14. </html>
  15.  

child.html内容

  1. {% extends 'booktest/base.html' %}
  2. {% block b1 %}
  3. {{ block.super }}
  4. <h1>这是子模板b1的内容</h1>
  5. {% endblock b1 %}
  6.  

在父模板中{% block b1 %} <h1>这是父模板b1块中的内容</h1> {% endblock b1 %}
定义一个预留快,预留块中可以有内容。子模板继承时,{% extends 'booktest/base.html' %}导入,{% block b1 %} {{ block.super }} <h1>这是子模板b1的内容</h1> {% endblock b1 %}写预留块,{{ block.super }}继承预留快的内容。

html转义

通过render()函数传递过来的模板上下文默认是转义的,也就是说我们想传递html语言的时候,实际上传递过来的是字符串,这个时候我们可以通过过滤器关闭转义

  1. {{context | safe}}
  2.  

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号