Django回顾【三】

目录

一、模板层

1、介绍

2、了解

3、页面静态化

4、模版语法

5、内置过滤器

6、标签

for标签

 if 标签

7、模板导入和继承

模板导入

模板继承


一、模板层

1、介绍

  • 模板在浏览器中是运行不了的 ----》因为它有模板语法  ----》浏览器解析不了模板语法
    • 必须在后端渲染完成(替换完成)  -----》变成纯粹的html,css,js
    • 这种在后端会被渲染的类python语法,它叫模板语法
      • django中它又叫dtl(django template language)

2、了解

python的模板:HTML代码+模板语法

def current_time(req):
    # ================================原始的视图函数
    # import datetime
    # now = datetime.datetime.now()
    # html = "现在时刻:

%s.

" %now # ================================django模板修改的视图函数 from django.template import Template,Context now = datetime.datetime.now() # 内部打开了这个模板 ---》读出所有内容,实例化得到了t对象 t = Template('现在时刻是:

{{current_date}}

') # t = get_template('current_datetime.html') c = Context({'current_date':str(now)}) html = t.render(c) return HttpResponse(html) # 另一种写法(推荐) import datetime now = datetime.datetime.now() return render(req, 'current_datetime.html', {'current_date':str(now)[:19]})

 总结:

render(request,'模板名字',context={key:value,key1:value})
本质是:
t=Template('现在时刻是:

{{current_date}}

') c=Context({'current_date':str(now)}) html=t.render(c) # 返回是字符串 HttpResponse(html)

3、页面静态化

  • 把什么页面,做成静态化的?----》访问量高的页面
  • 目的:提高项目并发量,响应速度和效率就高了
  • 把首页静态化
def index(request):
# 1 判断 cache文件夹下有没有index.html   纯静态页面
# 2 如果没有:做下面的事
    #     books = Book.object.all()
    #     t = Template('现在时刻是:

{{current_date}}

') # # t=get_template('current_datetime.html') # c = Context({'books':books}) # html = t.render(c) # 保存到某个文件中 cache文件夹下 index.html # 3 如果有那个文件,打开文件 ---》HttpReponse books=Book.object.all() return render(request,'index.html',{books:books})

4、模版语法

变量:{{ 变量名 }}   字典,列表,对象  ----》 通过.拿到属性或方法

  • 字典:dic.name--->这不是python语法  ---->  dic['name']    dic.get('name')
  • 列表:list.2--->这不是python语法   ---->   list[0]
  • 对象:person.name ----> 是python语法
    • person.run ----> 不是python语法,会自动加括号,把run的返回值放在模板中  
    • person.run()不支持传参数
  1. 深度查询 用句点符
  2. 过滤器
  3. 标签:{{% % }} 

5、内置过滤器

{{ now | date:"Y-m-d H:i:s" }}

  • 注意:冒号后面不能加空格
{#如果变量为空,设置默认值,空数据,None,变量不存在,都适用#}

{{ name |default:'数据为空' }}

{#计算长度,只有一个参数#}

{{ person_list |length }}

{#计算文件大小#}

{{ 1024 |filesizeformat }}

{#字符串切片,前闭后开,前面取到,后面取不到#}

{{ 'hello world lqz' |slice:"2:-1" }}

{{ 'hello world lqz' |slice:"2:5" }}

{#截断字符,至少三个起步,因为会有三个省略号(传负数,1,2,3都是三个省略号)#}

{{ '刘清政 world lqz' |truncatechars:"4" }}

{#截断文字,以空格做区分,这个不算省略号#}

{{ '刘清政 是 大帅比 谢谢' |truncatewords:"1" }}

{{s}} 不会渲染成标签,没有xss攻击 {#我们知道s是安全的,我们可以使用safe标签,把它渲染成真正的标签}

{{ link1 }}

{{ link1|safe }}

{{ link }}

{{ dot }}

{#add 可以加负数,传数字字符串都可以#}

{{ "10"|add:"-2" }}

{{ li.1|add:"-2" }}

{{ li.1|add:2 }}

{{ li.1|add:"2" }}

{{ li.1|add:"-2e" }}

{#upper#}

{{ name|upper }}

{{ 'LQZ'|lower }}

6、标签

for标签

{% for person in person_list %}
    

{{ person.name }}

{% endfor %} # 可以利用{% for obj in list reversed %}反向完成循环。

遍历一个字典:

{% for key,val in dic.items %}
    

{{ key }}:{{ val }}

{% endfor %}

 for … empty

# for 标签带有一个可选的{% empty %} 从句,以便在给出的组是空的或者没有被找到时,可以有所操作。
{% for person in person_list %}
    

{{ person.name }}

{% empty %}

sorry,no person here

{% endfor %}

 if 标签

# {% if %}会对一个变量求值,如果它的值是True(存在、不为空、且不是boolean类型的false值),对应的内容块会输出。

{% if num > 100 or num < 0 %}
    

无效

{% elif num > 80 and num < 100 %}

优秀

{% else %}

凑活吧

{% endif %} if语句支持 and 、or、==、>、<、!=、<=、>=、in、not in、is、is not判断。

7、模板导入和继承

模板导入

语法:{% include '模版名称' %}

我是广告

亚洲最大交友平台

名字是:{{ name }}---诚信交友





    
    Title


{% include 'little.html' %}

我是div222
# python代码:
def index(request):
    return render(request, 'index.html', {'name': '彭于晏'})

模板继承

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




    
    {% block title %}My amazing site{% endblock %}





{% block content %}{% endblock %}

这个模版,我们把它叫作 base.html, 它定义了一个可以用于两列排版页面的简单HTML骨架。“子模版”的工作是用它们的内容填充空的blocks。

在这个例子中, block 标签定义了三个可以被子模版内容填充的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。根据 blog_entries 的值,输出可能看起来是这样的:




    
    My amazing blog

 

    
 
    

Entry one

This is my first entry.

Entry two

This is my second entry.

你可能感兴趣的:(django,sqlite,python)