你的目录结构也可能取决于你使用的是什么版本的django。如果您使用的是django 1.3,处理静态内容的方式稍有改变。您的模板也可以分开安排。
以下仅适用于django 1.3。
在一个app
目录:
...
app1/
static/
app1/
templates/
app1/
models.py
...
views.py
如果使用新的django.contrib.staticfiles应用程序,您的设置可能是这个样子:
MEDIA_ROOT = path.join(ROOT_PATH,'uploaded_media/')
MEDIA_URL = '/uploaded_media/'
# static content is collected here, and served from here, but don't add stuff manually here! add to staticfiles_dirs
STATIC_ROOT = path.join(ROOT_PATH, 'collected_static/')
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATIC_URL = '/static/'
# Additional locations of static files
STATICFILES_DIRS = (
path.join(ROOT_PATH, 'src/extra_static/'),
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
同样,你的模板可直接从装INSTALLED_APP
:
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader'
)
TEMPLATE_DIRS = (
path.join(ROOT_PATH,'src/templates/'),
)
以上两种策略意味着模板和静态内容可以存在于其特定的应用程序目录中。在开发中,使用contrib.staticfiles
,可以直接从应用程序文件夹提供静态内容。在制作中,有一个管理命令将所有应用程序目录静态内容收集到/path/to/project/collected_static/
,并且您可以将您的Web服务器指向该目录以提供静态内容。
对于预打包的库,使用virtualenv和pip是一个好主意。否则,我喜欢将库存放在项目根目录下的lib
目录中。它使得源,模板和静态内容的引用非常方便,而不是安装到site-packages
(特别是当不使用virtualenv时)。
因此,重新安排你的项目结构:
webapps/
myproject/
apache/
bin/
lib/
collected_static/
uploaded_media/
myproject.wsgi
src/
templates/ # lib template overrides and site wide templates
base.html
lib_1/
nav.html
extra_static/
lib_1/ # libs that dont support django 1.3 static
js/
css/
settings.py
settingslocal.py # keep developer specific settings here
urls.py
manage.py
app1/
__init.py
static/
app1/
js/
css/
templates/
app1/
与原始问题有点无关,但与使用“/ static /”来存储静态资源有关......我在亚马逊网络服务部署了一个Django应用程序到Bitnami Django VM,并且所有客户端请求静态资源正在返回404未找到。我最终将其追踪到包含以下别名的django.conf文件中: Alias/static“xxx/python2.7/site-packages/django/contrib/admin/static” 因此,所有对“/ static/xyz “被别人带到别的地方失败了。只是想要注意到这一点,以防有人遇到同样的问题。 – jarmod 2013-02-18 18:44:24