2. 模板——Django学习

1. 变量

视图定义:{“HTML变量名” : “views变量名”}
view

from django.shortcuts import render
def runoob(request):
  views_name = ""
  return  render(request,"runoob.html", {"name":views_name})

模板使用:{{变量名}}
html模板

vim templates/runoob.html :
<p>{{ name }}</p>

2. 列表

view

from django.shortcuts import render
def runoob(request):
    views_list = ["1","2","3"]
    return render(request, "runoob.html", {"views_list": views_list})

html模板

vim HelloWorld/templates/runoob.html  
<p>{{ views_list }}</p>   # 取出整个列表
<p>{{ views_list.0 }}</p> # 取出列表的第一个元素

3. 字典

view

from django.shortcuts import render
def runoob(request):
    views_dict = {"name":""}
    return render(request, "runoob.html", {"views_dict": views_dict})

html模板

vim HelloWorld/templates/runoob.html  
<p>{{ views_dict }}</p>
<p>{{ views_dict.name }}</p>

4. 过滤器

html模板

{{ name|lower }} 
{{ my_list|first|upper }} 
{{ bio|truncatewords:"30" }} 

addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,
html模板

{{ pub_date|date:"F j, Y" }}

length : 返回变量的长度

5. default

html模板

{{ name|default:"blueicex" }}

6. length

html模板

{{ name|length}}

7. filesizeformat

以更易读的方式显示文件的大小(即’13 KB’, ‘4.1 MB’, '102 bytes’等)。
html模板

{{ num|filesizeformat}}

8. date

view

from django.shortcuts import render

def runoob(request):
    import datetime
    now  =datetime.datetime.now()
    return render(request, "runoob.html", {"time": now})

html模板

{{ time|date:"Y-m-d" }}

9. truncatechars

如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。截断的字符串将以 … 结尾。
view

from django.shortcuts import render

def runoob(request):
    views_str = ""
    return render(request, "runoob.html", {"views_str": views_str})

html模板

{{ views_str|truncatechars:2}}

10. safe

将字符串标记为安全,不需要转义。和后端 views.py 的 mark_safe 效果相同。
view

from django.shortcuts import render
def runoob(request):
    views_str = "点击跳转"
    return render(request, "runoob.html", {"views_str": views_str})

html模板

{{ views_str|safe }}

11. if/else 标签

{% if condition1 %}
   ... display 1
{% elif condition2 %}
   ... display 2
{% else %}
   ... display 3
{% endif %}

view

from django.shortcuts import render
def runoob(request):
    views_num = 88
    return render(request, "runoob.html", {"num": views_num})

html模板

{%if num > 90 and num <= 100 %}
优秀
{% elif num > 60 and num <= 90 %}
合格
{% else %}{% endif %}

12. for 标签

给标签增加一个 reversed 使得该列表被反向迭代

{% for athlete in athlete_list reversed %}
...
{% endfor %}

view

from django.shortcuts import render

def runoob(request):
    views_list = ["","1","2","3",]
    return render(request, "runoob.html", {"views_list": views_list})

html模板

{% for i in views_list %}
{{ i }}
{% endfor %}

13. 遍历字典

view

from django.shortcuts import render
def runoob(request):
    views_dict = {"name":"","age":18}
    return render(request, "runoob.html", {"views_dict": views_dict})

html模板

{% for i,j in views_dict.items %}
{{ i }}---{{ j }}
{% endfor %}

forloop.counter: 顺序获取循环序号,从 1 开始计算
forloop.counter0: 顺序获取循环序号,从 0 开始计算
forloop.revcounter: 倒叙获取循环序号,结尾序号为 1
forloop.revcounter0: 倒叙获取循环序号,结尾序号为 0
forloop.first(一般配合if标签使用): 第一条数据返回 True,其他数据返回 False
forloop.last(一般配合if标签使用): 最后一条数据返回 True,其他数据返回 False
{% empty %}在循环为空的时候执行

{% for i in listvar %}
    {{ forloop.counter0 }}
{% empty %}
    emtpy 
{% endfor %}

输出emtpy

14. ifequal/ifnotequal 标签

{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。

{% ifequal user currentuser %}
    <h1>Welcome!</h1>
{% endifequal %}
{% ifequal section 'sitenews' %}
    <h1>Site News</h1>
{% else %}
    <h1>No News Here</h1>
{% endifequal %}

15. 注释标签

Django 注释使用 {# #}。
{# 这是一个注释 #}

16. include 标签

{% include %} 标签允许在模板中包含其它的模板的内容。
html模板

{% include "nav.html" %}

17. csrf_token

csrf_token 用于form表单中,作用是跨站请求伪造保护。
不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。
用{% csrf_token %}标签,在 form 表单提交数据时,才会成功。

18. 自定义标签和过滤器

view

html模板

19. 配置静态文件

19.1 在项目根目录下创建 statics 目录
19.2 在 settings 文件的最下方配置添加以下配置:
STATIC_URL = '/static/' # 别名 
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "statics"), 
]
19.3 在 statics 目录下创建 css 、js 、images 、plugins 目录, 分别放 css文件,js文件,图片,插件。
19.4 把 bootstrap 框架放入插件目录 plugins
19.5 在 HTML 文件的 head 标签中引入 bootstrap

引入js,引用路径是别名 static,而不是目录statics 。

<link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css">

view

from django.shortcuts import render
def runoob(request):
    name =""
    return render(request, "runoob.html", {"name": name})
19.6 在模板中使用需要加入 {% load static %} 代码

模板文件

{% load static %}
{{name}}<img src="{% static "images/runoob-logo.png" %}" alt="runoob-logo">

20. 模板继承

模板可以用继承的方式来实现复用,减少冗余内容。网页的头部和尾部内容一般都是一致的,我们就可以通过模板继承来实现复用。父模板用于放置可重复利用的内容,子模板继承父模板的内容,并放置自己的内容。

20.1 父模板

标签 block…endblock: 父模板中的预留区域,该区域留给子模板填充差异性的内容,不同预留区域名字不能相同。

{% block 名称 %} 
预留给子模板的区域,可以设置设置默认内容
{% endblock 名称 %}
20.2 子模板

子模板使用标签 extends 继承父模板
{% extends “父模板路径”%}
子模板如果没有设置父模板预留区域的内容,则使用在父模板设置的默认内容,当然也可以都不设置,就为空。
子模板设置父模板预留区域的内容:
{ % block 名称 % }
内容
{% endblock 名称 %}
parent.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>(runoob.com)</title>
</head>
<body>
    <h1>Hello World!</h1>
    <p> Django 测试。</p>
    {% block mainbody %}
       <p>original</p>
    {% endblock %}
</body>
</html>

child.html 文件代码:

{%extends "parent.html" %}
 
{% block mainbody %}
<p>继承了 base.html 文件</p>
{% endblock %}

————Blueicex 2020/07/21 13:41 [email protected]

你可能感兴趣的:(Django)