我一直在搞乱新的collectstatic
命令,并让它适用于我的普通页面。也就是说,我能够在这个位置http://localhost:8000/static/css/main.css
加载我的CSS。但是,我的django管理员的CSS似乎没有显示出来。
当我导航到http://localhost:8000/static/admin/css/base.css
的admin css位置时,我找不到404页面,但发现以下错误:/home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist
。看着django-trunk,我从来没有开始使用/home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/
文件夹。
这有点奇怪吗?
在任何情况下,在我的静态文件夹中,都有一个admin文件夹,其中包含随附的css,img和js文件夹,这些文件夹是在我运行collectstatic时创建的,而base.css的url似乎指向该位置。
这发生在我的django开发服务器上。这里有一些片段可以帮助捕获bug:
网址
33 # In order for Dev Server to serve media files for the frontend site.
34 urlpatterns += staticfiles_urlpatterns()
35
36 try:
37 if settings.DEBUG: # defined in manage.py when the first arg is "runserver"
38 urlpatterns += patterns('',
39 (r'^media/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
40 (r'^media-admin/(?P<path>.*)$', 'django.views.static.serve',{'document_root': os.path.join(settings.MEDIA_ROOT, '..', settings.ADMIN_MEDIA_PREFIX)}),
41 )
42 except NameError:
43 pass
我认为这可能与我的URLS文件中的第40行有关,但将media-admin更改为static / admin没有帮助。
设置
58 ADMIN_MEDIA_PREFIX = '/static/admin'
69 STATIC_ROOT = os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', MEDIA_DIR, 'static')), '')
70
71 # URL prefix for static files.
72 # Example: "http://media.lawrence.com/static/"
73 STATIC_URL = '/static/'
74
75 # Additional locations of static files. Global files are stored in here
76 STATICFILES_DIRS = (
77 os.path.join(os.path.abspath(os.path.join(PROJECT_ROOT, '..', 'proj_public', 'static', 'proj')), ''),
78 )
79
Django建议您使用除wsgi之外的Web服务器部署静态文件。
STATIC_ROOT = 'static'
python manage.py collectstatic
,它将把Django管理静态文件复制到/path/to/project/static/
location /static/ {
alias /path/to/project/static/;
expires modified +1w;
}
您现在应该可以访问静态文件。
在Django 1.4中,ADMIN_MEDIA_PREFIX
已被弃用。以下是我采取的步骤,以了解这些最近的Django变化:
settings.py
,将django.contrib.staticfiles
添加到INSTALLED_APPS
settings.py
中定义STATIC_URL
- 如果没有它,staticfiles应用程序将无法运行。使用runserver
时,它们会被神奇地处理,但是当你部署时,这需要是一个浏览器可以获取这些资源的位置。我认为这就是它的全部内容。
我正在使用Django 1.4.3
什么对我不起作用:无论我在settings.py中编辑了多少ADMIN_MEDIA_PREFIX,我都注意到为Django Admin页面生成的HTML没有变化。当我查看源代码时,它总是说/media/admin/base.css。
什么DID对我有用。从/django/contrib/admin/static/
复制'admin'文件夹并将其粘贴到我的项目'media'文件夹中
现在它很棒。
这看起来很愚蠢,但实际上我确实遇到了这个问题,解决办法就是在我当地的开发环境中将DEBUG=False
设置为DEBUG=True
。当debug设置为False时,它认为它在生产环境中依赖于放置静态文件的位置,例如/var/www/html/static
,而调试设置为True只使用本地目录。
你需要在ADMIN_MEDIA_PREFIX
设置中使用尾部斜杠。
改成:
ADMIN_MEDIA_PREFIX = '/static/admin/'
我正在使用厨师在AWS Ubuntu服务器上自动构建我的django服务器。这篇文章有所帮助,但我最后做的是将目录添加到local_setings.py中的包管理静态页面:https://github.com/jaycrossler/geoq-chef-repo/blob/master/cookbooks/geoq/templates/default/local_settings.py.erb#L16
(added to local_settings.py or to settings.py):
STATICFILES_DIRS = ('<%= node['geoq']['virtualenv']['location'] %>/local/lib/python2.7/site-packages/django/contrib/admin/static/',)
这导致local_settings.py具有:
STATICFILES_DIRS = ('/var/lib/geoq/local/lib/python2.7/site-packages/django/contrib/admin/static/',)
请注意,如果您的STATICFILES_DIRS中已有其他项目,则可能需要附加到列表中,而不是覆盖它。
在我的项目中,解决方案是在settings.py
,设置:
DEBUG = False # debug false mod not working css
还要确保AppDirectoriesFinder未被注释,当您尝试自定义自己的应用程序结构时会发生这种情况。不幸的是,在官方文档中寻求此类信息毫无意义。
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
在settings.py中不要使用元组
STATICFILES_DIRS =(os.path.join(BASE_DIR,'static'),)
你应该使用list,就像这样
STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),]