一、模板配置
①、在项目中创建tempaltes文件夹,里面可以存放页面文件
②、在setting配置文件中找到TEMPLATES,DIRS:os.path.join(BASE_DIR, ‘templates’)意思是在根目录的templates中寻找html文件。
③、APP_DIRS:True表示若主tempates文件夹中未找到需要的html,则去app中的文件夹找,但是此app需要在INSTALLED_APPS中注册
④、若html文件都未找到,则抛出一个TemplateDoesNotExist的异常
二、数据渲染
将后台中的内容渲染到网页
①、列表元组直接可以通过下标读取
②、字典可以通过k来读取对应的值
三、标签符号(if、for、url链接)
1、if&for标签
注意点:
①、for循环可以使用reverse。{% for book in books reversed %} 进行反向遍历
②、for中提供了一些方法
项次 | 方法 | 说明 |
---|---|---|
1 | forloop.counter | 当前循环的下标。以1作为起始值。 |
2 | forloop.counter0 | 当前循环的下标。以0作为起始值。 |
3 | forloop.revcounter | 当前循环的反向下标值。比如列表有5个元素,那么第一次遍历这个属性是等于5,第二次是4,以此类推。并且是以1作为最后一个元素的下标。 |
4 | forloop.revcounter0 | 类似于forloop.revcounter。不同的是最后一个元素的下标是从0开始。 |
5 | forloop.first | 是否是第一次遍历。 |
6 | forloop.last | 是否是最后一次遍历。 |
③、{% for book in books %}book中的内容{% empty %} 如果book是空显示这儿 {% endfor%}
2、url反转
通过html中url进行网页的跳转 途中template_app未url中的app_name,index即为path中name,中间通过:连接
注: 这里的URL可以进行字符串拼接或者进行占位传参
①、字符串拼接:<-a href="{% url ‘book:detail’ book_id=1 %}?page=1">图书详情页面</-a>
②、占位传参:<-a href="{% url ‘book:detail’ book_id=1 page=2 %}">图书详情页面</-a>
3、模板过滤器
文中/表示|
项次 | 过滤器名称 | 用法 | 说明 |
---|---|---|---|
1 | add | { { value/add:“2” }} | 将传进来的参数添加到原来的值上面。这个过滤器会尝试将值和参数转换成整形然后进行相加。如果转换成整形过程中失败了,那么会将值和参数进行拼接。如果是字符串,那么会拼接成字符串,如果是列表,那么会拼接成一个列表。 |
2 | cut | { { value/cut:" " }} | 移除值中所有指定的字符串。类似于python中的replace(args,"")。 |
3 | date | { { birthday/date:“Y/m/d” }} | 将一个日期按照指定的格式,格式化成字符串。 |
4 | default | { { value/default:“nothing” }} | 如果值被评估为False。比如[],"",None,{}等这些在if判断中为False的值,都会使用default过滤器提供的默认值。 |
5 | first | { { value/first }} | 返回列表/元组/字符串中的第一个元素。 |
6 | last | { { value/last }} | 返回列表/元组/字符串中的最后一个元素。 |
7 | floatformat |
|
四舍五入 |
8 | join | { { value/join:"/" }} | 类似与Python中的join,将列表/元组/字符串用指定的字符进行拼接. |
9 | length | { { value/length }} | 获取一个列表/元组/字符串/字典的长度。 |
10 | lower | { { value/lower }} | 将值中所有的字符全部转换成小写。 |
11 | upper | { { value/upper }} | 类似于lower,只不过是将指定的字符串全部转换成大写。 |
12 | random | { { value/random }} | 在被给的列表/字符串/元组中随机的选择一个值。 |
13 | safe | { { value/safe }} | 标记一个字符串是安全的。也即会关掉这个字符串的自动转义。 |
14 | slice | { { some_list/slice:“2:” }} | 类似于Python中的切片操作。 |
15 | stringtags | { { value/striptags }} | 删除字符串中所有的html标签。 |
16 | truncatechars | { { value/truncatechars:5 }} | 如果给定的字符串长度超过了过滤器指定的长度。那么就会进行切割,并且会拼接三个点来作为省略号。 |
四、include和extends
1、include,加载自定义内容,也可以做标签过滤的动作
2、extends 模板继承
一般都建议一个base.html。将相同的部分放入此中 通过{% block 名称 %} {% endblock %} 来作为继承者的接口。
然后子模板中 通过block中定义的名称,来编译不同的部分。
五、加载静态文件(css、js)
①、首先确保django.contrib.staticfiles已经添加到settings.INSTALLED_APPS中。
②、确保在settings.py中设置了STATIC_URL。
③、在已经安装了的app下创建一个文件夹叫做static,然后再在这个static文件夹下创建一个当前app的名字的文件夹,再把静态文件放到这个文件夹下。
④、如果有一些静态文件是不和任何app挂钩的。那么可以在settings.py中添加STATICFILES_DIRS,以后DTL就会在这个列表的路径中查找静态文件。
STATICFILES_DIRS = [
os.path.join(BASE_DIR,"static"),
]
⑤、在模版中使用load标签加载static标签。比如要加载在项目的static文件夹下的style.css的文件。
{
% load static %}
<link rel="stylesheet" href="{% static 'style.css' %}">
⑥、如果不想每次在模版中加载静态文件都使用load加载static标签,那么可以在settings.py中的TEMPLATES/OPTIONS添加’builtins’:[‘django.templatetags.static’],这样以后在模版中就可以直接使用static标签,而不用手动的load了。