django template 基础(模板对象(Template),上下文对象(Context))

django template 基础(模板对象(Template),上下文对象(Context))

1 启动python环境: python manage.py shell

从项目目录下,通过 python manage.py shell 来启动 :与直接使用python 命令的不同是,会告诉django 的使用的配置文件 settings

2 创建Template,Context对象:

创建对象代码

from django.template import Context, Template
t = Template("select {{id}}, {{name}} from {{table}}")
d ={'name':'name' , 'id':'id' , 'table':'table'}
c = Context(d)
t.render(c)

注意:t.render(c)返回的值是一个Unicode对象,一个模板可以被多个context对象渲染控制

3 Context 上下文

1 if/else选择
from django.template import Context, Template
template = '''
    select t.id,
           t.name,
           {% if count %}
           count(t.age)
           {% else %}
           sum(t.age)
           {% endif %}
      from {{table}}     
    group by t.id,t.name
'''
t2 = Template(template)
print(t2.render(c))

输出结果:

  select t.id,
          t.name,

          sum(t.age)

     from table
   group by t.id,t.name

总结:

  • 基本用法 {% if 变量 %} : 当变量 为flast或者不存在的时候,渲染else(可选)部分,{% endif %}语句结束
2. for 循环
class Student():
    def __init__(self,name,age):
        self.id = name
        self.age = age

stlist = []        
for i in range(5):
    st = Student('inx'+str(i),i+20)
    stlist.append(st)

template2 = '''
{% if stlist %}
    students:
    {% for st in stlist %}
    {% if forloop.first %} student {{forloop.counter}}:{{st.name}},{{st.age}} the bigbrather {% endif %}
    student {{forloop.counter}}:{{st.name}},{{st.age}}
    {% empty %}
    no students
    {% endfor %}
{% else %}
    no student!!!
{% endif %}
'''
t3 = Template(template2)
str = t3.render(Context({'stlist':stlist}))
print(str)

打印结果(忽略换行):
students:
student 1:,20 the bigbrather
student 1:,20
student 2:,21
student 3:,22
student 4:,23
student 5:,24
总结:

  • 1 基本用法 :{% for st in stlist %} ……{%endfor%}
  • 2 forloop模块变量:
  • counter: 循环的计数器 从1开始
  • counter0: 循环的计数器 从0开始
  • revcounter: 反向计数器,以1结束
  • revcounter0: 反向计数器,以0结束
  • first: 布尔值,第一次循环的时候为TRUE
  • last: 布尔值,最后一次循环的时候为TRUE
  • parentloop:上次forloop对象的引用
  • 3{% empty %} 列表为空时执行
  • 4 {% for %} 中还能 嵌套 {% for %}
3. 过滤器
  • {{ name|lower }} : 将name的值全部改成小写
  • {{ my_list|first|upper }} #嵌套过滤,将myfist 首字母小写
  • {{ bio|truncatewords:”30” }} #截取前30个字符
  • {{ pub_date|date:”F j, Y” }} #格式化pub_date时间字符串
4 ifequal/ifnoequal : 判断两个变量值是否相等

示例:

  • {% ifequal user currentuser %}Welcome!{% endifequal %} :判断user 与currentuser是否相等

  • {% ifequal section “community” %}Community{% else %}Site News{% endifequal %}

注意: ifequal/ifnoequal 只能比较模板变量,字符串,小数,整数,不能用字典类型、列表类型、布尔类型,直接比较 如:不支持{% ifequal variable True %}

5 注释:
  • 单行注释:
    {# This is a comment #} ;
  • 多行注释:
{% comment %}
This is a
multi-line comment.
{% endcomment %}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

crystalnsd

万水千山总是情,支持一下行不行

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值