我注意到staticfiles
没有将管理员的静态文件复制到STATIC_ROOT
。我的印象(我现在无法找到参考资料),一旦您将django.contrib.staticfiles
包含在INSTALLED_APPS
中,它就会自动复制管理员的静态文件(以及所有其他文件) )。但是,似乎并非如此。
通过浏览十几个相关问题,似乎可以接受的方法是将您的virtualenv
管理路径的硬编码路径包含在您的NGINX中,such as here:
location /static/admin {
root /webapps/hello_django/lib/python2.7/site-packages/django/contrib/admin/;
}
然而,这对我来说似乎很脏。
我还应该提到发现者正在为我工作,即
$ ./manage.py findstatic admin
Found 'admin' here:
/<path to venv>/lib/python2.7/site-packages/django/contrib/admin/static/admin
我在这里错过了什么吗?
答案 0 :(得分:1)
检查settings.py
中是否设置了所有设置。
我想您的静态文件位于项目根文件夹中的static
dir下。
import os
import sys
STATIC_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static/')
STATIC_URL = '/static/'
ADMIN_MEDIA_PREFIX = '/static/admin/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
INSTALLED_APPS = (
# default apps
'django.contrib.staticfiles',
# etc
)
STATICFILES_DIRS = ()
nginx config:
location /static {
alias /path_to_your_project/static;
access_log off;
expires max;
}
答案 1 :(得分:0)
原来我的settings.py
拆分方法存在一个微妙的问题。对于来自Google的任何人,我都在关注deploydjango.com以及有关分割settings.py
的策略,但ROOT_DIR
正在根据项目进行定义,即以下结构
$ tree -L 2
.
├── static
├── apps
└── project
├── __init__.py
├── settings
│ ├── __init__.py
│ ├── base.py
│ ├── dev.py
│ └── prod.py
├── urls.py
└── wsgi.py
使用以下设置
STATICFILES_DIRS = (
ABS_PATH('apps', 'example_app', 'static'),
)
会导致ROOT_DIR
设置为project/
。由于ABS_PATH
函数定义了基于ROOT_DIR
的路径,因此apps/
文件夹不可见(它应以'..'
开头)。
解决方案当然是将apps/
文件夹移到project/
文件夹中,这是有道理的。即正确的结构如下:
$ tree -L 2
.
├── static
└── project_name
├── __init__.py
├── apps # <-- apps moved here
│ └── example_app
├── settings
│ ├── __init__.py
│ ├── base.py
│ ├── dev.py
│ └── prod.py
├── urls.py
└── wsgi.py
我意识到这个问题与我做事的方式紧密相关,但是由于这种结构可以被某些人视为“最佳实践”(尽管some disagree),我希望这有助于某人!