Django Admin CSS缺失

问题描述 投票:37回答:9

我一直在搞乱新的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 django-admin
9个回答
25
投票

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

  1. 在settings.py中,设置:

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. 重新加载您的Web服务器

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


26
投票

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

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

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


16
投票

我正在使用Django 1.4.3

什么对我不起作用:无论我在settings.py中编辑了多少ADMIN_MEDIA_PREFIX,我都注意到为Django Admin页面生成的HTML没有变化。当我查看源代码时,它总是说/media/admin/base.css。

什么DID对我有用。从/django/contrib/admin/static/复制'admin'文件夹并将其粘贴到我的项目'media'文件夹中

现在它很棒。


4
投票

这看起来很愚蠢,但实际上我确实遇到了这个问题,解决办法就是在我当地的开发环境中将DEBUG=False设置为DEBUG=True。当debug设置为False时,它认为它在生产环境中依赖于放置静态文件的位置,例如/var/www/html/static,而调试设置为True只使用本地目录。


2
投票

你需要在ADMIN_MEDIA_PREFIX设置中使用尾部斜杠。

改成:

ADMIN_MEDIA_PREFIX = '/static/admin/' 

0
投票

我正在使用厨师在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中已有其他项目,则可能需要附加到列表中,而不是覆盖它。


0
投票

在我的项目中,解决方案是在settings.py,设置:

DEBUG = False # debug false mod not working css


0
投票

还要确保AppDirectoriesFinder未被注释,当您尝试自定义自己的应用程序结构时会发生这种情况。不幸的是,在官方文档中寻求此类信息毫无意义。

STATICFILES_FINDERS = [
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
]

-1
投票

在settings.py中不要使用元组

STATICFILES_DIRS =(os.path.join(BASE_DIR,'static'),)

你应该使用list,就像这样

STATICFILES_DIRS = [os.path.join(BASE_DIR,'static'),]

© www.soinside.com 2019 - 2024. All rights reserved.