Django 1.4中的静态文件夹结构?

7
这是新的项目结构(来自Django 1.4发行说明)。
myproject | - manage.py | - myproject | | - __init__.py | | - settings.py | | - urls.py | `-- wsgi.py `-- polls | - __init__.py | - models.py | - tests.py `-- views.py
我不确定的是,STATIC_ROOT应该指向哪里?
是 'myproject/myproject/static/' (与settings.py、urls.py...在一起)吗?
还是顶级目录 'myproject/static' (在myproject、myapp1、myapp2旁边)?

3
我不知道“官方”的说法是什么,但我认为顶层目录更有意义。 - agf
3个回答

7

STATIC_ROOT与Python导入无关,因此完全取决于您。通常情况下,myproject/static/,因此在设置中使用os.path.join(PROJECT_ROOT, 'static/')更容易。

更新如San4ez所建议的,并在settings.py内添加注释。

# 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/ 中。

2

我同意@okm的观点,myproject/static/是一个好的静态文件存储位置,但是你也可以将图片、CSS和JS存储在myproject/polls/media中。然后,你需要配置django.contrib.staticfiles应用程序,并使用命令将静态文件从media复制到STATIC_ROOT。

python manage.py collectstatic

这种方法的优点是可以让你将应用程序与静态资源分开,使应用程序可以在其他项目中自由使用。

css、js和图像应该都是myproject/myproject/static和myproject/poll/static中的子文件夹。 使用名为"media"的文件夹很危险,因为它与Django通常用于上传用户图像和其他文件的文件夹名称冲突。 它也是管理静态文件使用的文件夹(在执行collectstatic之后)。 collectstatic确实会将它们收集到一个生产服务器上,然后从一个中心文件夹(通常位于myproject文件夹结构之外,如/var/www/www.mysite.com/static)提供服务。 - hobs

1

STATIC_ROOT 是一个文件路径,staticfiles 贡献应用程序将收集和存储所有静态文件的位置。它是一个收集项目的位置,仅此而已。关键是这个位置是临时存储,主要用于打包部署应用程序时使用。

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接