Static folders structure in Django 1.4?
这是新的项目结构(摘自Django1.4发行说明)。
1 2 3 4 5 6 7 8 9 10 11 12
| myproject
|-- manage.py
|-- myproject
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- polls
|-- __init__.py
|-- models.py
|-- tests.py
`-- views.py |
我不确定的是我是否应该将静态根指向
myproject/myproject/static/(连同settings.py、urls.py…)
或
顶层目录myproject/static(myproject、myapp1、myapp2旁边)?
- 我不知道"官方"这个词是什么,但我认为顶级目录更有意义。
STATIC_ROOT与python导入无关,因此完全取决于您。通常情况下,myproject/static/在设置中更容易,因此os.path.join(PROJECT_ROOT, 'static/')在设置中更容易。
按照san4ez建议进行更新,并在settings.py中添加注释。
1 2 3 4
| # Absolute path to the directory static files should be collected to.
# Don't put anything in this directory yourself; store your static files
# in apps'"static/" subdirectories and in STATICFILES_DIRS.
# Example:"/home/media/media.lawrence.com/static/" |
根据您的结构,最好将poll应用程序的静态文件放入poll/static/中。
我同意@okm的说法,myproject/static/是一个静态的好地方,但是你也可以在myproject/polls/media的应用程序中存储图像、CSS和JS。而不需要配置django.contrib.staticfiles应用程序,然后使用命令将static从media复制到static_根目录。
1
| python manage.py collectstatic |
号
这种方法的优点是,它允许你用静态的方式传播你的应用,你的应用可以在其他项目中自由使用。
- css、js和images应该都是myproject/myproject/static以及myproject/poll/static中的子文件夹。使用名为media的文件夹是危险的,因为它与Django中通常用于用户上载的图像和其他文件的文件夹名冲突。它也是管理员静态文件使用的文件夹(在CollectStatic之后)。collect static确实会将它们收集到生产服务器上,然后从中心文件夹(通常在myproject文件夹结构之外,如/var/www/www.mysite.com/static)为它们提供服务。
STATIC_ROOT只是staticfilescontrib应用程序收集和存放所有静态文件的文件路径。这是一个收集物品的地方,仅此而已。关键是这个位置是临时存储,主要用于打包应用程序进行部署。
staticfiles应用程序在INSTALLED_APPS中列出的任何应用程序以及STATICFILES_DIRS中列出的任何额外文件路径位置中搜索要从名为static的任何目录中收集的项目。
对于我的项目,我创建了一个deploy目录,在该目录中我创建了一个用于静态文件的www文件夹,以及仅在部署时使用的各种其他文件。此目录位于项目的顶层。
您可以将变量指向您的用户具有写入权限的任何位置,它不需要位于项目目录中。