1 templates
1.1 项目根目录下
1.1.1 结构示例
1.1.2 配置方式
在settings.py中,确保TEMPLATES配置如下:
1.1.3 适用场景
适合存放跨应用共享的模板,例如全局布局或通用组件。
1.2 每个应用目录下
1.2.1 结构示例
1.2.2 配置方式
settings.py中只需保留APP_DIRS: True,无需额外配置DIRS。
1.2.3 适用场景
适合模板与应用强关联的情况,符合Django惯例,避免模板冲突。
2 static
2.1 项目根目录下
2.1.1 结构示例
2.1.2 配置方式
在settings.py中配置:
2.1.3 适用场景
适合存放全局共享的静态文件,如通用CSS、JS或图片。
2.1.4 在templates目录的html文件中导入static目录中所需的文件
【1】导入static目录
{% load static %}
<!DOCTYPE html>
......
</html>
【2】导入static中所需的文件
{% load static %}
<!DOCTYPE html>
<head>
......
<link rel="stylesheet" href="{% static 'css/style.css' %}">
</head>
</html>
2.2 每个应用目录下
2.2.1 结构示例
2.2.2 配置方式
settings.py中无需额外配置STATICFILES_DIRS,Django会自动查找每个应用的static/应用名/目录。
2.2.3 适用场景
适合静态文件与应用强关联的情况,例如应用特有的样式或脚本
2.2.4 在templates目录的html文件中导入static目录中所需的文件
【1】导入static目录
{% load static %}
<!DOCTYPE html>
......
</html>
【2】导入static中所需的文件
{% load static %}
<!DOCTYPE html>
<head>
......
<link rel="stylesheet" href="{% static 'app1/css/style.css' %}">
</head>
</html>
2.3 自定义路径(如apps目录下)
2.3.1 结构示例
2.3.2 配置方式
在settings.py中添加自定义路径到STATICFILES_DIRS:
2.3.3 适用场景
适合将静态文件集中管理,同时避免与模板目录混淆。
2.3.4 在templates目录的html文件中导入static目录中所需的文件
【1】导入static目录
{% load static %}
<!DOCTYPE html>
......
</html>
【2】导入static中所需的文件
{% load static %}
<!DOCTYPE html>
<head>
......
<link rel="stylesheet" href="{% static 'css/global.css' %}">
</head>
</html>
3 templatetags
这个是在自定义inclusion_tag函数时需要创建的包,且包名不可变
这个是Django中自定义模板函数的相关知识,若想了解,可查阅相关信息
3.1 存放位置
一般是存放在子应用目录下,与子应用中的templates目录同级,
且是一个包,而不是普通文件夹
3.2 结构示例
为了防止其他子应用与当前system_web子应用的templatetags包下的py文件重名【即避免命名冲突】
通常推荐如上图的规范做法:
在templatetags包下创建一个包,包名的命名规范是:子应用名_tags
再在 子应用名_tags 包下 去创建py文件【如上图menu.py】,在该文件中定义inclusion_tag函数
这类自定义模板函数是作用于模板文件的,因此,通常会在同级的templates目录下创建一个tags目录【这个名称可以是自定义的】,再在该目录下创建相关模板文件
3.3 导入与使用
在template目录下的模板文件中导入包中对应的模块
在要使用inclusion_tags函数的地方再进行调用
其中,show_role_menu就是在menu中定义的inclusion_tag函数
4 总结
【1】templates目录,可以存放到项目根目录下,也可以存放到各子应用目录下
在settings.py的TEMPLATES配置项中,
前者确保配置上
'DIRS': [os.path.join(BASE_DIR, 'templates')],
后者只需确保配置上
'APPDIRS': True
即可
当然,如果templates目录两者都有存放,在settings.py中两者都配置上即可
注:若templates目录存放到各子应用目录下,为了避免html模板命名冲突,
建议在每个templates目录下再创建一个对应子应用名的目录,再在该目录中存放html模板文件
【2.1】static目录,存放到项目根目录
在settings.py中,
配置上 STATIC_URL = '/static/' 即可
# 可选,但建议保留以支持项目根目录的static
STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static')]
在html模板文件中,
引入 static 目录:
{% load static %}
引入 static 目录 中所需文件:
如:<link rel="stylesheet" href="{% static 'css/boot.css' %}">
【2.2】static目录,存放到各子应用目录
在settings.py中,
无需STATICFILES_DIRS配置,因为Django会自动查找各子应用的static/目录
在html模板文件中,
引入 static 目录:
{% load static %}
引入 static 目录 中所需文件:
如:<link rel="stylesheet" href="{% static 'app1/css/boot.css' %}">
注:同样地,为了避免命名冲突,同样需要在static目录下创建子应用目录名作为静态文件的父目录
【2.3】static目录,存放到项目根目录下其他自定义位置,如apps目录
在settings.py中,配置上
STATIC_URL = '/static/' # 默认值,可自定义
STATICFILES_DIRS = [
BASE_DIR / "apps/static", # 自定义静态文件目录
]
STATIC_ROOT = BASE_DIR / "staticcollected" # 生产环境收集目录
在html模板文件中,
引入 static 目录:
{% load static %}
引入 static 目录 中所需文件:
如:<link rel="stylesheet" href="{% static 'css/boot.css' %}">
注:
(1)关于STATIC_URL————
(1.1)作用:用于定义静态文件访问前缀的配置项。
当你在模板中使用 {% static 'filepath' %} 标签时,
Django 会自动将这个路径与STATIC_URL 组合,生成完整的静态文件访问路径;
(1.2)其值是可以自定义修改的,修改后所生成的路径前缀即为你修改的值;
(1.3)该配置无论static存放在哪,都需要在settings.py中配置上
(2)关于STATICFILES_DIRS————
(2.1)指定了静态文件的搜索路径,Django 会在此路径下查找静态文件;
(2.2)通常在static目录存放到自定义位置上,才需要显式配置
(3)关于STATIC_ROOT————
(3.1)是用于生产环境下静态文件的收集目录
(3.2)开发环境中可以不配置 STATIC_ROOT,但生产环境强烈建议配置
(3.3)无论static目录存放在哪里,生产环境都应该使用 collectstatic 命令来管理静态文件