你的目錄結構也可能取決於你使用的是什麼版本的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