Django Admin CSS缺失

时间:2011-08-30 10:15:17

标签: django django-admin

我一直在搞乱新的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 

12 个答案:

答案 0 :(得分:26)

在Django 1.4中ADMIN_MEDIA_PREFIX已被弃用。以下是我为了赶上这些最近的Django变化而采取的步骤:

    settings.py
  1. ,将django.contrib.staticfiles添加到INSTALLED_APPS

  2. settings.py中定义STATIC_URL - 如果没有它,staticfiles应用程序将无法运行。使用runserver时,它们会被神奇地处理,但是当您部署时,这需要是一个浏览器可以获取这些资源的位置。

  3. 我认为这就是它的全部内容。

答案 1 :(得分:25)

Django建议您使用wsgi以外的Web服务器部署静态文件。

  1. settings.py 中,设置:
  2. STATIC_ROOT = 'static'

    1. 运行python manage.py collectstatic,将Django管理员静态文件复制到/path/to/project/static/

    2. 配置静态文件服务器。如果你使用Nginx,你可以添加这个配置:

      location /static/ {                              
          alias /path/to/project/static/;  
          expires modified +1w;                        
      }  
      
    3. 重新加载您的网络服务器

    4. 您现在应该可以访问静态文件。

答案 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'),   ]