关于python:Django 1.4中的静态文件夹结构?

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

这种方法的优点是,它允许你用静态的方式传播你的应用,你的应用可以在其他项目中自由使用。


STATIC_ROOT只是staticfilescontrib应用程序收集和存放所有静态文件的文件路径。这是一个收集物品的地方,仅此而已。关键是这个位置是临时存储,主要用于打包应用程序进行部署。

staticfiles应用程序在INSTALLED_APPS中列出的任何应用程序以及STATICFILES_DIRS中列出的任何额外文件路径位置中搜索要从名为static的任何目录中收集的项目。

对于我的项目,我创建了一个deploy目录,在该目录中我创建了一个用于静态文件的www文件夹,以及仅在部署时使用的各种其他文件。此目录位于项目的顶层。

您可以将变量指向您的用户具有写入权限的任何位置,它不需要位于项目目录中。