我真的很困惑。我有一个django网站设置,我的设置都是正确的,但当我运行我的服务器时,它找不到文件。请参阅下面的必要代码。
settings.py:
INSTALLED_APPS = [
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.admin',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'django_comments',
'best_schools',
'debug_toolbar',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'debug_toolbar.middleware.DebugToolbarMiddleware',
]
# --snip--
STATIC_URL = '/static/'
STATIC_ROOT = os.path.dirname(os.path.dirname(
os.path.abspath(__file__))) + '/static/'
目录结构:
jonathan at k-nine ~/Sites/tbs_django (master tbs_django) [02:04 pm]
-> ls ./
best_schools/ db.sqlite3 license.txt manage.py* README.md requirements.txt static/ tbs/ templates/
ipython控制台:
In [1]: from tbs import settings
In [2]: settings.STATIC_ROOT
Out[2]: '/home/jonathan/Sites/tbs_django/static/'
In [3]: settings.STATIC_URL
Out[3]: '/static/'
manage.py findstatic
的输出甚至看不到我的静态目录:
jonathan at k-nine ~/Sites/tbs_django (master tbs_django) [02:06 pm]
-> manage.py findstatic --verbosity 2 custom-admin.css
/home/jonathan/Sites/tbs_django/manage.py
No matching file found for 'custom-admin.css'.
Looking in the following locations:
/home/jonathan/.virtualenvs/django-tbs/lib/python3.6/site-packages/django/contrib/admin/static
/home/jonathan/.virtualenvs/django-tbs/lib/python3.6/site-packages/debug_toolbar/static
我在urls.py中有这个:urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
奇怪的是,当我运行manage.py runserver --nostatic
时,它完美无缺。为什么django找不到我的静态文件?我正在运行Django 1.10.2。
答案 0 :(得分:0)
尝试在urls.py中添加这些行并使用collectstatic
if settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
python manage.py collectstatic
答案 1 :(得分:0)
通常的想法是静态文件属于某个应用,并且位于static/
中该应用的目录中。这就是Django自己的应用程序如何运作,以及管理员工作的原因。
例如,best_schools应用程序的静态文件应该在
中'/home/jonathan/Sites/tbs_django/best_schools/static/best_schools/'
(是的,那是best_schools
两次)。您应该在urls.py中为runserver添加任何内容以查找它们。
然后当你去制作并且文件由除Django之外的某个Web服务器提供服务时,你运行python manage.py collectstatic
,搜索所有INSTALLED_APPS并将文件复制到配置的STATIC_ROOT,你服务的是网络服务器。