Django之tpl模板

作者: ropon 分类: Django 发布时间: 2018-11-21 17:22
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>

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!