python_django_template模块

北战南征 提交于 2019-11-26 11:14:03

官方文档

博文导航:

定义模板:

    变量

  标签:

    if

    for

    include

    url

    csrf_token

  过滤器:

    简单过滤器

    HTML转义:escape

    加减乘除的过滤器

  注释:

 

模板语言:Django 模板是一些文本字符串,作用是把文档的表现与数据区分开。模板定义一些占位符和基本的逻辑(模板标签),规定如何显示文档。通常,模板用于生成HTML(Django 模板也可以生成任何基于文本的格式)。

定义模板:

变量:

视图传递给模板的数据(注:变量名命名要遵守标识符命名规则)

  语法:{{ var }}

变量用于对象的传递:

  语法:{{ stu.name }}

变量用于调用对象的方法

  注:在模板中调用对象的方法不能传递参数!

举个栗子:

对应view.py文件

from . import models
def index(request):
    # 调用对象
    student = models.Students.stuObj.get(pk=1)
    # 将对象传入模板中
    return render(request,'myMain/index.html',{"num":3333, "stu": student})

我们在创建数据库的Students类中增加方法getName():

class Students(models.Model):
    # ......
    def getName(self):   # 不能传递参数!!
        return self.name   # 返回数据库中的姓名

对应html模板

    <h1>{{ num }}</h1>
    <h1>{{ stu.name }}</h1>
    <h1>{{ stu.getName}}</h1>

 标签:在输出中创建文本,并进行控制逻辑和循环

 语法:{% tag %}

 if 语句语法:

{% if 表达式 %}
语句
{% endif %}

if-else语句:

{% if 表达式 %}
语句1
{% else %}
语句2
{% endif %}

if-elif语句:

{% if 表达式1 %}
语句1
{% elif 表达式2 %}
语句2
....
{% else %}
语句n
{% endif %}

ifequal、ifnotequal: 如果值相等、不相等

{% ifequal 值1 值2 %}   # 如果值1等于值2则执行语句
语句
{% endifequal %}

 

for循环语法:

1、

{% for 变量 in 列表 %}
语句
{% endfor %}

2、

{% for 变量 in 列表 %}
语句1
{% empty %}   # 列表为空或列表不存在时继承语句2
语句2
{% endfor %}

3、for循环的一个用法:

{{forloop.counter}}   # 用于for循环,表示当前是第几次循环

 举个栗子:

对应html模板文件:

<h1>学生列表</h1>
    <ul>
    {% for stu in students %}
        {% if forloop.counter|divisibleby:2%}    {# | 为过滤器,divisibleby:取余#}    
        <li style="color:darkred">
            {{forloop.counter}}--{{ stu.name }}--{{stu.age}}
        </li>
        {% else %}
        <li style="color:darkgreen">
            {{forloop.counter}}--{{ stu.name }}--{{stu.age}}
        </li>
        {% endif %}
    {% empty %}
        <li>目前没有学生信息</li>
    {% endfor%}
    </ul>

对于的views.py文件:

from django.shortcuts import render
from . import models
def students(request):
    list = models.Students.stuObj.all()
    return render(request,'myMain/students.html',{'students':list})

显示结果:

 

 include标签:加载模板以标签内的参数渲染

  【格式:{% include '模板目录' 参数1 参数2... %}】

 url标签:反向解析

 

csrf_token:

过滤器:在变量显示前修改它

语法:{{ var | 过滤器}}

简单过滤器:

  • lower:全变为小写 
  • upper:全变为大写
  • divisibleby:取余【格式:{{被取余值 | 取余值}}】(4%2)
  • default:若一个变量没有被提供,即获取值为false/空,则可设置默认值default
  • date:根据给定格式转换日期为字符串【格式:{{dateVal | date:'y-m-d'}}】

过滤器方法:可用于参数的传递(参数用‘’ 引起来)

举个栗子:

对应html文件

<div>{{ str }}</div>
<div>{{ str|upper}}</div>
<div>{{ list|join:'#' }}</div>    <!--其中个# 就为传递的参数(表示用# 连接为字符串)-->
<div>{{ test | default:'我啥也没有'}}</div>

对应views.py 文件

return render(request,'myMain/students.html',{'str':"baby is girl",'list':['good','nice','yemade'],'test':False})

显示结果:

baby is girl
BABY IS GIRL
good#nice#yemade
我啥也没有

HTML转义:escape

举个例子

加减乘除的过滤器

举个栗子:

对应html模板

    <h1>num = {{num}}</h1>
    <h1>num1 = {{num | add:10}}</h1>
    <h1>num2 = {{num | add:-5}}</h1>
    <!--相当于num/1*5 (乘5)-->
    <h1>num3 = {% widthratio num 1 5 %}</h1>
    <!--相当于num/5*1(除5)-->
    <h1>num4 = {% widthratio num 5 1 %}</h1>

对应views.py文件

    return render(request,'myMain/students.html',{'num':10})

显示结果:

num = 10
num1 = 20
num2 = 5
num3 = 50
num4 = 2

 

 注释:

 单行注释:

  {# 注释内容 #} 

 多行注释:关键字comment

  {% comment %}

  注释内容

  {% endcomment %}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!