视图定义:{“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>
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> # 取出列表的第一个元素
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>
html模板
{{ name|lower }}
{{ my_list|first|upper }}
{{ bio|truncatewords:"30" }}
addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面。
date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,
html模板
{{ pub_date|date:"F j, Y" }}
length : 返回变量的长度
html模板
{{ name|default:"blueicex" }}
html模板
{{ name|length}}
以更易读的方式显示文件的大小(即’13 KB’, ‘4.1 MB’, '102 bytes’等)。
html模板
{{ num|filesizeformat}}
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" }}
如果字符串包含的字符总个数多于指定的字符数量,那么会被截断掉后面的部分。截断的字符串将以 … 结尾。
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}}
将字符串标记为安全,不需要转义。和后端 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 }}
{% 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 %}
给标签增加一个 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 %}
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
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}
{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}
Django 注释使用 {# #}。
{# 这是一个注释 #}
{% include %} 标签允许在模板中包含其它的模板的内容。
html模板
{% include "nav.html" %}
csrf_token 用于form表单中,作用是跨站请求伪造保护。
不用{% csrf_token %}标签,在用 form 表单时,要再次跳转页面会报403权限错误。
用{% csrf_token %}标签,在 form 表单提交数据时,才会成功。
view
html模板
STATIC_URL = '/static/' # 别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "statics"),
]
引入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})
模板文件
{% load static %}
{{name}}<img src="{% static "images/runoob-logo.png" %}" alt="runoob-logo">
模板可以用继承的方式来实现复用,减少冗余内容。网页的头部和尾部内容一般都是一致的,我们就可以通过模板继承来实现复用。父模板用于放置可重复利用的内容,子模板继承父模板的内容,并放置自己的内容。
标签 block…endblock: 父模板中的预留区域,该区域留给子模板填充差异性的内容,不同预留区域名字不能相同。
{% block 名称 %}
预留给子模板的区域,可以设置设置默认内容
{% endblock 名称 %}
子模板使用标签 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]