Django——模板语法

####模板

模板是web框架中一种方便动态生成HTML的一种后端工具。模板包括有html的静态部分,以及插入动态内容的语法部分。
Django 可以配置一个或多个模板引擎,默认的是DTL,常见的还有 jinja2模板,例如 Flask 使用的就是 jinja2 模板。

####使用模板语法
在web页面中,很多页面都具有公共部分,如果每个页面都写了一堆重复代码,就显得累赘。用模板语法来建立一个基础模板是一个很好的办法。
######模板的继承

# 一个基础的模板 index.html
<!DOCTYPE html>
<html>
<head>
	<meta charset="UTF-8">
	<p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
	<title>{% block title %}首页{% endblock %}</title>
	<p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
</head>
<body>
	<p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
	<p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
	{% block body1 %}
	<span>这是首页的私有部分</span>
	{% endblock %}
	<p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
	{% block body2 %}
	<span>这是首页的私有部分</span>
	{% endblock %}
	<p>公共部分·公共部分·公共部分·公共部分·公共部分</p>
</body>
</html>

现在写一个与首页大部分相同,只有是有部分不一样的页面

{% extends 'index.html' %}
{% block title %}第二页{% endblock %}
{% block body1 %}
<span>这是第二页的私有部分1</span>
{% endblock %}
{% block body1 %}
<span>这是第二页的私有部分1</span>
{% endblock %}

######文件加载

<!--加载静态文件-->
{% load staticfiles %}
<!--load主要是加载一些文件-->
<!--引用静态文件: static/image/1.png-->
{% static ‘image/1.png’ %}
<!--引用url: user app下的index路由 /user/index-->
{% url ‘user:index’ %}
<!--引用url:带参数0   /user/index/0/-->
{% url ‘user:index’ 0 %}
<!--引用media文件:media/imge/1.png -->
# 指定具体图片
<img src="{{MEDIA_URL}}1.png">
# 从数据库中获取的imagefile字段(product表image字段)
<img src="{{product.image.url}}">

#####引用变量
变量是由后端传递的一些动态数据

<!--变量的引用形式-->
{{variable}}
<!--变量的可以是python中的变量,常量,列表,元组,字典,对象等-->
<!--对变量进一步查找-->
<!--字典根据键查找-->
{{dict[key]}}
<!--列表根据下标查找-->
{{list.0}}
<!--属性查找-->
{{obj.name}}
<!--方法查找-->
{{obj.say()}}

在django模板语法中,如果变量不存在,将使用setting.py中 变量TEMPLATE_STRING_IF_INVALID的值代替

######过滤器的使用

<!--过滤器的使用形式-->
{{variable|filter}}
<!--支持采用链式方式使用-->
{{text|escape|linebreaks}}
<!--可以携带参数(显示变量前三十个词)-->
{{bio|truncatewords:30}}
<!--参数中如果带空格,需要用引号引起来-->
{{list|join:", "}}
<!--django中常用的内建过滤器--> 
add  {{value|add:"2"}} <!--value值加2-->
addslashes  {{value|addslashes}}  <!--在value中的引号前增加反斜线-->
capfirst    {{value|capfirst}}    <!--value的第一个字符转化成大写形式-->
cut         {{value|cut:arg}}     <!--从给定value中删除所有arg的值-->

######自定义过滤器函数

#myfilter.py
from django import template

@register.filter
def filter1(value,*arg)
	return "value是{0}参数有{1}".format(value,arg)

使用:

<!--test.html-->
<!--使用自定义filter前应先加载filter文件-->
{% load myfilter.py %}
{{value|filter: "6"}}
{{value|filter}}

######标签的使用

<!--标签的使用形式-->
{% tag %}
<!--在输出时创建一些文本/通过执行循环和一些逻辑来实现控制流/装载一些外部信息进入模板-->
<!--对指定父模板进行扩展-->
{% extends “base.html” %}
<!--变量可以是一个字符串-->   
{% extends variable %}  
<!--内容不需要转义-->
{% autoesape off %}   (内容)  {% endautoescape %}
<!--定义可被子孙重写的模块--> 
{% block %}  (定议块内容) {% endblock %}  
<!--忽略标签内容-->
{% comment %}     (内容)    {% endcommon %}
<!--循环时轮流使用给定字符串列表中的值-->  
<tr class="{% cycle list %}">  ...  </tr>
<!--app1路由下的index的url地址--><!--0 是参数,没有则不填。参数是模板变量可直接使用变量名--> 
{% url 'app1:index' 0 %} <!--localhost:8000/app1/index/0-->   

######标签

<!--条件标签-->
{% if ... %}
{% elif ... %}
{% else %}
{% endif %}

<!--循环标签:{% for %} 在一个序列上迭代。-->
{% for .. in .. %}
{% endfor %}

<!--比较标签:{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。-->
{% ifequal %}
{% else %}
{% endifequal %}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值