文章目录
- templates介绍
- 概述
- 详解Django模板语言
- 逻辑标签
- 内置的标签
- 变量
- 模板变量
- 过滤器(写在html文件中的,是django的模板语言)
- 自定义过滤器
- 常用内置过滤器
- 配置一个html页面显示的步骤
- templates使用
- templates查找文件的路径
templates介绍
1.templates翻译为模板
2.templates即是html文件,它使用了Django模板语言
3.它也可使用第三方模块如jinja2
概述
- Django Template负责整个表现逻辑,通过内置的模板语言结合HTML文件,为用户呈现Web内容;
- Template模板系统是一个独立的语言库,所以除了与HTML文件结合,也可以与其他文本格式的文档结合,甚至可以独立运行;
- Template模板系统通过模板标签、过滤器、流程控制语句、模板继承等方式,实现了Web页面的动态展现。
详解Django模板语言
逻辑标签
{ if }{endif}
进行逻辑判断
{ if request.user }
<div class='top1'></div>
{ elif }
<div class='top2'></div>
{ endif }
- 通过 {% if %} 判断是否为真,如果是为真,执行第一个div代码块;
- 如果为假,执行第二个div代码快,最终通过 {% endif %} 结束判断语句;
{ for } 循环
{ for user in all_user }
<p>all_user.user</p>
{endfor}
说明:
- Django模板文件除了if和for两种逻辑语句之外,不支持其他复杂的语句,更不支持直接调用Python语言;
- 这与Django的设计理念有关,Django里面限制了我们不能在模板层过多地使用Python代码以及逻辑,因为如果过多的在模板层使用逻辑,这将会在后期维护的时候很困难
内置的标签
变量
模板变量
{{ }}
用于存储模板变量,变量内容可以直接从views函数获取,也可以通过if/for标签来获取{% url ' url_name ' %}
跳转到特定url映射的模板变量,变量内容由url_name决定
<a href='{% url 'index'%}>首页</a>
<form method="post" action="{% url 'delete' %}">
过滤器(写在html文件中的,是django的模板语言)
自定义过滤器
简介:过滤器即在变量后面加上管道符和过滤关键词,可以对模板变量的内容做进一步的操作。
创建方法:
- 在应用下创建template文件夹
- 在文件夹下创建myfilter.py
例子:
from django import template
register = template.Library() # 定义过滤器
@register.filter
def test_filter(value, args):
return value + args
{% load myfilter %}
{{data | test_filter: 3}}
常用内置过滤器
配置一个html页面显示的步骤
1.配置url
2.配置对应的views视图逻辑
3.拆分静态文件(static,css,js)到static,html放入到template之下
1.可以放到对应的app下面
2.也可以放入到全局的template和目录之下
4.配置全局的static文件访问路径的配置STATICFILE_DIRS(自己加上的参数)
templates使用
1.在app目录下创建一个templates文件夹,然后在templates文件夹下创建另一个文件夹(名字为app名)
2.在该文件夹下创建一个Html文件,编辑HTML文件
4。编辑views.py,这里需要使用render,render翻译为渲染
render()函数介绍:
- 第一个参数为请求request,是必须填的,request代表了HTTP的一个请求对象
- 第二个参数为我们的HTML文件的路径,也是必填
- 第三个参数为我们后台传到前端的数据,是选填,这是一个支持字典类型的参数,该字典是后台传递到前端(模板)的参数,键为参数名,模板(HTML文件)中使用{{ 参数名 }}直接调用
5.打开浏览器输入对应网址就可以访问,如下图,可以显示HTML页面
因为我后面没有在templates目录下使用那个app文件夹,所以网址后面不用加/app
templates查找文件的路径
1.Django按照INSTALLED_APPS的添加顺序查找templates
2.templates文件夹下的同名HTML文件会冲突
说明
这就是上面创建templates目录之后还要在templates目录下创建app目录的原因