真的很感谢@Simeon Visser 的回答所花费的时间,那里有一些非常有用的信息,但这并不完全是我想要的。所以我四处打听,并请 reddit 的 sinister_user_name 对此表示感谢,我认为这可能对其他人有所帮助:
静态文件在最近的版本中发生了相当大的变化,所以旧博客可能有点乱。
我会试一试:
在您的模板中,您可以使用static_url 标签,django 会为您填写路径。
<link rel="stylesheet" href="{{ STATIC_URL }}css/bootstrap.min.css">
它通过查看您的设置文件来填充静态 url。 STATIC_URL 默认为 /static/ 我认为在设置中?如果静态文件在您的公司网络服务器上以一个奇怪的 url 结束,您无论如何都可以在设置中更改它,它将反映在所有模板中。所以它们是否是绝对的并不重要。
当您进行部署时,您在设置中填写STATIC_ROOT,这只是您设置网络服务器以查找静态文件的路径。然后,如果您运行manage.py collectstatic,它会将它们复制到该目录。我认为这是STATIC_ROOT的唯一功能。
我将模板目录与我的静态目录分开,主要是因为您希望您的网络服务器只提供静态文件,而模板由 python 处理。因此,就 Web 服务器查看静态文件而言,它们几乎不是应用程序的一部分。我将模板和静态文件保存在单独的路径中,只是在基本目录中,主要是因为它们都不是 python 源文件。
所以我的项目结构是这样的:
manage.py
website/settings.py
app/models.py
app/views.py
templates/base.html
static/js/jquery.js
static/css/bootstrap.css
相对路径的问题在于,如果您的 url 方案发生变化,它们将需要更改。
可选:我在此博客中发现,这有助于不将绝对文件系统路径放入 settings.py,如果您在多台机器上工作,例如工作和家庭,这很好:(
由于 1.4 的布局略有不同,我在设置的顶部使用了它:
import os
import django
import manage
DJANGO_ROOT = os.path.dirname(os.path.realpath(django.__file__))
SITE_ROOT = os.path.dirname(os.path.realpath(manage.__file__))
而不是他们建议的(设置的位置已在 1.4 或 1.3 中移动)所以SITE_ROOT 搞砸了。我认为这可能会奏效。
在我使用的设置中进一步向下:
# Additional locations of static files
STATICFILES_DIRS = (
os.path.join(SITE_ROOT, 'static'),
)
这将告诉开发服务器在哪里可以找到静态文件。您可以对模板执行相同的操作,也可以只使用完整的文件路径。