我一直在搞乱新的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
答案 0 :(得分:26)
在Django 1.4中ADMIN_MEDIA_PREFIX
已被弃用。以下是我为了赶上这些最近的Django变化而采取的步骤:
settings.py
中,将django.contrib.staticfiles
添加到INSTALLED_APPS
在settings.py
中定义STATIC_URL
- 如果没有它,staticfiles应用程序将无法运行。使用runserver
时,它们会被神奇地处理,但是当您部署时,这需要是一个浏览器可以获取这些资源的位置。
我认为这就是它的全部内容。
答案 1 :(得分:25)
Django建议您使用wsgi以外的Web服务器部署静态文件。
STATIC_ROOT = 'static'
运行python manage.py collectstatic
,将Django管理员静态文件复制到/path/to/project/static/
配置静态文件服务器。如果你使用Nginx,你可以添加这个配置:
location /static/ {
alias /path/to/project/static/;
expires modified +1w;
}
重新加载您的网络服务器
您现在应该可以访问静态文件。
答案 2 :(得分:16)
我正在使用Django 1.4.3
什么对我不起作用: 无论我在settings.py中编辑了多少ADMIN_MEDIA_PREFIX,我都注意到为Django Admin页面生成的HTML没有任何变化。当我查看源代码时,它总是说/media/admin/base.css。
DID对我有用。
从/django/contrib/admin/static/
复制'admin'文件夹并将其粘贴到我的项目'media'文件夹
现在效果很好。
答案 3 :(得分:3)
这似乎很愚蠢,但实际上我确实遇到了这个问题,解决方案是在本地开发环境中将DEBUG=False
设置为DEBUG=True
。当debug设置为False时,它认为它处于生产环境中,该环境依赖于放置静态文件的位置,例如/var/www/html/static
,而debug设置为True则仅使用本地目录。
答案 4 :(得分:2)
您需要在ADMIN_MEDIA_PREFIX
设置中使用尾部斜杠。
更改为:
ADMIN_MEDIA_PREFIX = '/static/admin/'
答案 5 :(得分:0)
我正在使用chef在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中已有其他项目,则可能需要附加到列表中,而不是覆盖它。
答案 6 :(得分:0)
在我的项目中,解决方案在settings.py
中,设置为:
DEBUG = False # debug false mod not working css
答案 7 :(得分:0)
还要确保在尝试自定义应用程序结构时不会对AppDirectoriesFinder进行注释。不幸的是,在官方文档中寻找此类信息毫无意义。
STATICFILES_FINDERS = [
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]
答案 8 :(得分:0)
一种解决方案可能是将本地IP添加到settings.py中的ALLOWED_HOSTS
列表中
例如
CURRENT_IP = '192.168.0.123'
ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '0.0.0.0', CURRENT_IP]
答案 9 :(得分:0)
您需要
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
答案 10 :(得分:0)
只需在 settings.py 中更改一件事
DEBUG = False # not working if you are not serve your static files for production.
只是改变
DEBUG = True
答案 11 :(得分:-1)
在settings.py 中
不要使用元组STATICFILES_DIRS =( os.path.join(BASE_DIR,'static'), )
你应该使用list,就像这样
STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static'), ]