from django.shortcuts import render
# Create your views here.
def index(request):
s = 'hello'
l = ['Python', 'PHP', 'Shell', 'Go']
dic = {'name': 'ropon', 'age':18}
import time
riqi = time.strftime("%Y-%m-%d")
import datetime
now = datetime.datetime.now()
class Person(object):
def __init__(self, name):
self.name = name
def eatting(self):
return self.name + ' eatting...'
person_ropon = Person('ropon')
person_pengge = Person('pengge')
person_luo = Person('luo')
person_list = [person_ropon, person_pengge, person_luo]
testvar = '测试过滤器'
filesize = 2354230
str = 'very good'
artic = '如附图测试可以访问,请您清空浏览器缓存或者换个浏览器后访问看看,若仍无法访问'
link = '<a href ="http://www.ropon.top">Ropon运维</a>'
num = 99
# locals() 代表所有局部变量
# return render(request, 'app01/index.html', {'s':s})
return render(request, 'app01/index.html', locals())
# 模板语法之变量
# {{ var_name }}
# 可渲染字符串 列表 字典 元组 集合 日期对象 以及类的属性及方法
# 遍历复杂数据结构的关键字句点字符. l.0 dic.name
# 模板之过滤器
# {{obj|filter_name:param}}
# default
# 如果一个变量是false或者为空 使用给定的默认值 否则使用变量的值
# {{value|default:'是空的'}}
# length
# 返回值的长度
# {{value|length}}
# filesizeformat
# 格式化值 比如文件大小
# {{ filesize|filesizeformat }}
# date
# 格式化显示日期 时间
# {{ now|date:"Y-m-d" }}
# slice 分割字符串
# {{str|slice:'1:-1'}}
# truncatechars 设置仅显示指定长度字符串 注意... 要算三个字符
# {{ artic|truncatechars:20 }}
# safe
# 为了安全 django模板中对html标签和js等语法标签进行自动转义
# 如果不需要转义 则需要使用过滤器|safe 告诉django代码安全不需转义
# 模板之标签
# 语法
# {% tag %} ... {% endtag %}
# for标签
# {% for l1 in l %}
# <li>{{ l1 }}</li>
# {% endfor %}
# 反向循环使用 {% for l1 in l reversed %}
# 遍历字典
# {% for key,val in dic.items %}
# <p>{{ key }}:{{ val }}</p>
# {% endfor %}
# 循环中参数
# {{ forloop.counter }} 循环序号 从1开始
# {{ forloop.counter0 }} 循环序号 从0开始
# {{ forloop.revcounter }} 反向循环序号 结尾为1
# {{ forloop.revcounter0 }} 反向循环序号 结尾为0
# {{ forloop.first }} 是否是第一循环 返回布尔值
# {{ forloop.last }} 是否是最后一从循环 返回布尔值
# for ... empty标签
# { % for l1 in l %}
# ...
# { % empty %}
# <p> 为空 </p>
# { % endfor %}
# if标签
# {% if ... %}
# ...
# {% elif %}
# ...
# {% else %}
# ...
# {% endif %}
# with标签 起个别名
# {% with name2=person_list.2.eatting %}
# {{ name2 }}
# {% endwith %}
# csrf_token
# form表单中加 {% csrf_token %}
# 模板继承
# 语法
# {% block 钩子名 %}
# ...
# {% endblock %}
# 具体模板文件index.html
# 语法 extend
# {% extends "blog/base.html" %}
# {% block title %}
# Ropon运维-2018
# {% endblock title %}
# {% extends "blog/base.html" %} 必须放在模板最前面
# base母版中尽量定义多个钩子 模板没有定义将继承母版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title></head>
<body><h4>模板语法之变量</h4>
<p>{{ s }}</p>
<p>{{ l.1 }}</p>
<p>{{ dic.name }}</p>
<p>{{ riqi }}</p>
<p>{{ now.year }}</p>
<p>{{ person_list.1.name }}</p>
<p>{{ person_list.2.eatting }}</p>
<p>{{ testvar|default:'是空的' }}</p>
<p>{{ l|length }}</p>
<p>{{ filesize|filesizeformat }}</p>
<p>{{ now|date:"Y/m/d" }}</p>
<p>{{ str|slice:'1:-1' }}</p>
<p>{{ artic|truncatechars:20 }}</p>
<p>{{ link|safe }}</p>
<ul>{% for l1 in l %}
<li>{{ forloop.counter }} {{ l1 }}</li>{% endfor %}</ul>{% for key,val in dic.items %}
<p>{{ forloop.revcounter }} {{ key }}:{{ val }}</p>{{ forloop.first }} {% endfor %} {% for l1 in l %} {% empty %}
<p>为空</p> {% endfor %} {% if num > 100 or num < 0 %} <p>参数不正确</p> {% elif num > 80 and num < 100 %}
<p>A</p> {% else %} <p>B</p> {% endif %} {% with name2=person_list.2.eatting %} {{ name2 }} {% endwith %}
<form action="/app01/" method="post"> {% csrf_token %} <input name="user" type="text"> <input name="pwd"
type="password">
<button type="submit">提交</button>
</form>
</body>
</html>