Django 重写模板静态文件位置

2 投票
2 回答
831 浏览
提问于 2025-04-18 03:42

如果我想替换一个已经安装的应用的模板,我会把 .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 个回答

0

在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)。

0

你可以把它们存放在任何你想要的地方。没有“正确的位置”,但是你必须:

确保Django能识别包含你静态模板文件的目录为模板目录

根据Django文档:

Django会在多个地方搜索模板目录,这取决于你的模板加载器设置(见下面的“加载器类型”),但最基本的指定模板目录的方法是使用TEMPLATE_DIRS设置。

要添加或更改模板目录,可以在你的设置文件中使用TEMPLATE_DIRS这个元组。例如:

TEMPLATE_DIRS = (
"/home/html/templates/template.html",
"/home/html/templates/default",
)

撰写回答