Django 重写模板静态文件位置
如果我想替换一个已经安装的应用的模板,我会把 .html 文件放在 /templates/appname/
这个文件夹里。那么,我想知道存放这些替换模板的静态文件(比如图片、CSS样式等)应该放在哪里比较合适呢?
我可以把它们放在 /common_static/appname
吗?或者有没有更好的地方或者方法来完全替换这些模板呢?
举个例子,假设这个应用叫做 notifications:
├── common_static
│ ├── notifications
│ ├── css
│ ├── styles.css
│ ├── js
│ ├── anim.js
├── templates
│ ├── base.html
│ ├── notifications
│ ├── file1.html
│ ├── file2.html
2 个回答
在Django中,有多种方法可以存储模板和静态文件。以下是两种可以使用的结构:
A. 你上面提到的那种:
/templates - 存放项目的所有模板,里面可以有一个app_name文件夹来存放特定应用的模板。
/static - 存放项目的所有静态文件,里面也可以有一个app_name文件夹来存放特定应用的静态文件。
这样做的好处是,你会清楚知道项目中所有的模板和静态文件在哪里。
管理起来也会更简单,而且名字冲突的可能性更小。
B. 在特定应用中存储模板和静态文件:
templates - 只存放项目级别的模板,比如base.html、404.html等。
app_name>/templates - 存放与特定应用相关的所有模板。
static - 只存放项目级别的静态文件,比如favicon.ico等。
app_name/static - 存放与特定应用相关的所有静态文件。
这种方式适合你想要构建独立的应用,可以单独使用。
不过在这种情况下,名字冲突的可能性会更高,所以你需要遵循一些命名规则,比如在模板名字前加上'app_name_'这样的前缀。
另外,你还需要将这些模板和静态文件的路径添加到Django的TEMPLATE_DIRS和STATICFILES_DIRS设置中,比如:
TEMPLATE_DIRS = (<app_name>/templates,)
STATICFILES_DIRS = (<app_name>/static,)
而且你需要运行./manage.py collectstatic,才能让静态文件在生产模式下正常工作(也就是DEBUG = False)。
你可以把它们存放在任何你想要的地方。没有“正确的位置”,但是你必须:
确保Django能识别包含你静态模板文件的目录为模板目录。
根据Django文档:
Django会在多个地方搜索模板目录,这取决于你的模板加载器设置(见下面的“加载器类型”),但最基本的指定模板目录的方法是使用TEMPLATE_DIRS设置。
要添加或更改模板目录,可以在你的设置文件中使用TEMPLATE_DIRS这个元组。例如:
TEMPLATE_DIRS = (
"/home/html/templates/template.html",
"/home/html/templates/default",
)