前言
模板语言:html + 逻辑控制语句
Django模板基本语法
# bash
python manage.py shell # 进入django命令行
# django
from django.template import Context, Template
t = Template('Welcome {{ name }}!') # html模板
c = Context({'name': 'wolf'}) # 设置渲染对象
t.render(c) // 渲染
# --> Welcome wolf!
- {{ 变量 }}
- 万能的句点 .
render传过来的对象,字典,类,列表的属性都可以直接使用 - {% 语句 %}
- 判断
{% if True %} # if 后只能跟布尔值,
# your code...
{% elif %}
# your code...
{% else %}
# your code...
{% endif %}
- 循环
{% for i in obj %} # 遍历django中rander传过来的可遍历对象
# your code...
{% endfor %}
# i 为值
# 获取索引
{{ forloop.counter }} # 索引从1开始
{{ forloop.counter0 }} # 从0开始索引
{{ forloop.revcounter }} # 索引从高到低,值正常的从低到高
- 管道符 |(filter)
{{ obj|upper }} # 对obj中的值都使用upper方法
{{ obj|lower }}
{{ obj|first|upper }} # 去除第一个字母,再大写
{{ obj|capfirst }} # 首字母大写
{{ obj|add:5 }} # 加5
{{ obj|cut:' ' }} # 删除字符中的空格
{{ obj|date:'Y-m-d' }}
{{ obj|default:'空的' }} # 数据为空时,以默认的‘空的’代替
- 特殊
# 告诉浏览器语句是安全的,浏览器会将传过来的字符串中的html渲染
{% autoescape off %}
# your code...
{% endautoescape %}
{{ var|safe }} # 跟上面的作用一样
{{ var|slice:':-2'}} # 切片
{{ var|filesizeformat }} # 大小
{{ var|length }} # 长度
{{ var|urlencode }}
{{ var|truncatechars:'6' }} # 截取6个字符
{{ var|truncatewords:'6' }} # 截取6个单词
<form>
<input>
{% csrf_token %} # 解决forbidden错误,如果用render_to_response()须要另外加一个参数
</form>
<form action={% url %}> # 别名(alias)
{% load temp_name %} # 加载标签库,加载自定义模板
{% with total=sadasdasfqwdad %}{{ total }}{% endwith %}
# 用简单的变量名代替复杂的变量名
{% verbatim %} # 禁止render
{{ asjdi }} # 直接输出{{ asjdl }}
{% endverbatim %}
自定义模板templatetags
在app文件夹下添加文件夹templatetags
在这个文件夹下写自定义模板
- 方法,可以传个参数,但不能放在if下作为条件
# FILE:/templatetags/my_tags.py
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
# 创建自定义模板
@register.simple_tag
def my_add(s):
return s+100
{% load my_tags %} // 加载自定义模板
<html>
<p>
{% my_add 100 %} <!--浏览器输出200-->
</p>
用tag方法:

浏览器输出:

- filter
@register.filter # 引入跟第一种方法一样,只需要将simple_tag改成filter
def my_add_2(s):
return s+100
使用filter方法:

导入一个变量num=3:

浏览器输出:

传入参数,最多传入2个参数:
@register.filter # 引入跟第一种方法一样,只需要将simple_tag改成filter
def my_add_2(s, s2):
return s+100+s2
{{ num|my_add_2:12 }}

HTML模板
- 创建模板
<!-- FILE:base.html -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block content %}
{% endblock %}
</body>
</html>
- 使用模板
{% extends 'base.html' %} <!--必须放在最前面-->
{% block content %}
<div></div> <!--这里的html部分会代替到模板的block区-->
{% endblock %
- 使用模板中本来有的html,继承
{% extends 'base.html' %} <!--必须放在最前面-->
{% block content %}
{% block:super %} <!--继承原来block中的html-->
<div></div> <!--这里的html部分会代替到模板的block区-->
{% endblock %

本文主要介绍了前端开发中的Django模板语言,包括基本语法如{{ 变量 }}和{% 语句 %},万能的句点.用于访问对象属性,以及管道符|的应用。还讲解了如何自定义模板templatetags,并提供了实例说明。同时,讨论了HTML模板的创建和使用,以及模板的继承机制。
159

被折叠的 条评论
为什么被折叠?



