Django中供视图读取的非代码模板类杂项文件的常规存储位置?
Django中杂项文件(如Excel模板)的约定存储位置
在Django社区里,针对这类仅由后端视图读取、无需模板渲染也不属于代码/前端静态资源的文件,有几种约定俗成的存储方案:
1. App级专属目录(推荐单App使用场景)
在目标App目录下创建专门的子目录,比如resources/、assets/或templates_nonrendered/,用来存放这类模板文件。
示例目录结构(假设App名为reports):
reports/ ├── __init__.py ├── views.py ├── models.py └── resources/ └── excel_template.xlsx
视图中读取文件的代码示例:
from django.apps import apps import os from openpyxl import load_workbook def generate_excel_view(request): app_config = apps.get_app_config('reports') template_path = os.path.join(app_config.path, 'resources', 'excel_template.xlsx') wb = load_workbook(template_path) # 插入数据库数据的逻辑... # 生成并返回Excel响应的逻辑...
2. 项目级共享目录(推荐多App共用文件场景)
如果模板文件需要被多个App共享,可在项目根目录下创建全局目录(如project_resources/或shared_assets/),然后在settings.py中添加自定义配置统一管理路径:
# settings.py import os BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) RESOURCES_DIR = os.path.join(BASE_DIR, 'project_resources')
视图中调用配置读取文件的示例:
from django.conf import settings from openpyxl import load_workbook def generate_excel_view(request): template_path = os.path.join(settings.RESOURCES_DIR, 'excel_template.xlsx') wb = load_workbook(template_path) # 数据插入与响应逻辑...
注意事项
- 不要放在
static/目录:static/是前端可访问的静态资源目录,会被collectstatic工具收集,不适合后端专用模板文件。 - 避免混入
templates/目录:templates/是Django模板引擎的扫描目录,除非文件需要用模板语法渲染,否则单独存放更清晰。 - 部署时注意权限:确保Django运行进程拥有该目录的读取权限;容器部署时需将目录正确挂载或打包进镜像。
内容的提问来源于stack exchange,提问作者nigel222
相关产品推荐
相关产品推荐

