专栏首页python3Django之Template

Django之Template

Template模板

  • Template模板的使用帮助我们将数据对应的插入到html文档中显示给用户。

一.Template和Context对象

t = Template('My name is {{ name }}.')
c = Context({'name': 'sfencs'})
print(t.render(c))

二.引入html中

在视图函数中:

def login(req):
    return render(req,"test.html",{"name":"sfencs"})

在html中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{{ name }}
</body>
</html>

这样在浏览器中渲染出的就是sfencs,即把{{ name }}替换成了views函数传递的字典对应的值。

三.变量

如上节所写,{{ }}中放入的就是变量 可是有时候我们传给模板的并不一定只是一个字符串,有可能是一个字典,一个列表,那怎样在模板中对它们进行操作呢? 方法是使用”.”句点号

  • 表示索引:item.2
  • 表示字典的键的值:item.key
  • 表示对象的属性:item.property,自定义的类的对象的属性也可以
  • 表示对象的方法:item.function_name,只能使用不需要参数的方法

四.过滤器filter

filter就相当于是对模板中变量执行的方法,使用方法是{{obj|filter:param}} 介绍几个简单的pyth内置的过滤器

  • add : 给变量加上一个值
  • addslashes:给变量中的引号前加上斜线
  • capfirst:首字母大写
  • default:如果值是False,就替换成设置的默认值,否则就是用本来的值

具体其他的内置过滤器可以参考https://blog.csdn.net/foryouslgme/article/details/52057445 这里过滤器后边只能跟一个参数。

五.tag标签

if
{% if age == 3 %}
    <p>等于3</p>
{% elif age > 3 %}
    <p>大于3</p>
{%else  %}
    <p>小于3</p>
{% endif %}

注意age与符号之间有空格 if标签中可以使用and,or,但不能同时使用and和or

for
{% for i in people %}
  <h1>{{ people.name }}</h1>
  <ul>
  {% for j in i.hobby %}
    <li>{{ j }}</li>
  {% endfor %}
  </ul>
{% endfor %}

for标签中自带了一个forloop变量可以提供有关循环的信息

  • forloop.counter表示循环的次数,它从1开始计数
  • forloop.counter0表示循环的次数,它从0开始计数
  • forloop.revcounter 是表示循环中剩余项的整型变量。 在循环初次执行时 forloop.revcounter 将被设置为序列中项的总数。 最后一次循环执行中,这个变量将被置1
  • forloop.revcounter0 类似于 forloop.revcounter ,但它以0做为结束索引
  • forloop.first当第一次循环时值为True

{% empty %}表示如果循环项为空则执行的部分 {% for obj in list reversed %}表示反序循环

{%csrf_token%}

在表单最后加上{%csrf_token%},用于防治跨站攻击验证

{% with %}

用更简单的变量名替代复杂的变量名

{% with simple=complex %} 
{{simple }}
 {% endwith %}
{% verbatim %}

不适用render传来的content

{% verbatim %}
{{ age }}
{% endverbatim %}

页面显示的是 {{ age }}

六.自定义filter和simple_tag

1.在app中创建templatetags文件包
2.在templatetags文件包下创建一个python文件,名称自己取如:my_tags
3.在my_tags中引入template,创建register
from django import template
register = template.Library()
4.创建自己的filter或tag

使用相应的装饰器

@register.filter
def filter_mult(v1,v2):
    return  v1 * v2

@register.simple_tag
def simple_tag_multi(v1,v2):
    return  v1 * v2
5.在html中引入该文件
{% load my_tags %}
6.在html中使用
{{ age|filter_mult:2 }}

{% simple_tag_mult age 3 %}
7.注意
  • filter最多只能有两个参数,tag可以有多个参数
  • filter可以使用在if等语句后,tag不可以

七.extend模板继承

模板继承可以解决html代码重复的问题,比如两个页面的大体结构类似,只有小部分的内容不同,如果写到两个不同的html中就会有相当多的代码重复,这个时候将相同部分的html写到一个html中,不同的部分用模板表示,再用一个新的html继承它,并将模板的部分代替。

1.基础html定义要替代的代码块
{% block content %}

{% endblock %}

这里block可以起不同的名称,用于不同的代码块的替换

2.在另一个html中继承它

首先要在文档开头添加{% extends “base.html” %},表示要继承的html 然后按照block名称相应的写入要代替的内容

{% block title %}
{{age}}
{% endblock %}
3.例如:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
{% block title %}

{% endblock %}
</body>
</html>
{% extends "base.html" %}

{% block title %}
{{age}}
{% endblock %}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Django 模版语法 二

    如果值是False,就替换成设置的默认值,否则就是用本来的值 在 views.py 中修改

    py3study
  • 用python 实现activex网页控

    http://sourceforge.net/projects/pywin32/files/

    py3study
  • 03_多协程爬取糗事百科热图

    今天在使用正则表达式时未能解决实际问题,于是使用bs4库完成匹配,通过反复测试,最终解决了实际的问题,加深了对bs4.BeautifulSoup模块的理解。

    py3study
  • Django 模版语法 二

    如果值是False,就替换成设置的默认值,否则就是用本来的值 在 views.py 中修改

    py3study
  • react native使用WebView加载本地html部署方案

    十里桃花舞丶
  • 为了不复制粘贴,我被逼着学会了JAVA爬虫

    受疫情影响一直在家远程办公,公司业务进展的缓慢,老实讲活并没有那么多,每天吃饭、睡觉、逛技术社区、写博客,摸鱼摸得爽的很。早上本来还想在来个回笼觉,突然部门经理...

    程序员内点事
  • 生信人的R语言视频教程-语法篇-第十一章:R中的网络爬虫

    用任何语言做爬虫必须要了解的就是网页语法,网页语言无非就是HTML,XML,JSON等,因为正是通过这些我们才能在网页中提取数据,过多的就不再描述,大家可以自行...

    DoubleHelix
  • 为了不复制粘贴,我被逼着学会了JAVA爬虫

    受疫情影响一直在家远程办公,公司业务进展的缓慢,老实讲活并没有那么多,每天吃饭、睡觉、逛技术社区、写博客,摸鱼摸得爽的很。早上本来还想在来个回笼觉,突然部门经理...

    程序员内点事
  • 前端跨域知识简介

    前端跨域知识简介 灵感 差不多2年前,由于业务需要,了解各种各样不同的跨域方式。但由于各种方式千奇百怪,我觉得有必要将各种方法封装起来,方便使用,弄了个简单的跨...

    李成熙heyli
  • 前后端分离之vue2.0+webpack2 实战项目 -- html模板拼接

    对于前后端分离,如何把一个页面的公共部分比如head, header, footer, content等组合成一个完整的html 是一个值得考虑的地方。 对于p...

    smy

扫码关注云+社区

领取腾讯云代金券