【问题标题】:Django Admin CSS missing缺少 Django 管理 CSS
【发布时间】:2011-11-06 16:30:17
【问题描述】:

我一直在搞乱新的collectstatic 命令,并让它在我的普通页面上工作。也就是说,我可以在http://localhost:8000/static/css/main.css这个位置加载我的css。但是,我的 django 管理员的 css 似乎没有出现。

当我导航到位于 http://localhost:8000/static/admin/css/base.css 的管理 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 文件夹,其中包含我运行 collectstatic 时创建的 css、img 和 js 文件夹,并且 base.css 的 url 似乎指向该位置。

这发生在我的 django 开发服务器上。这里有一些帮助寻找 bug 的 sn-ps:

网址

 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


【解决方案1】:

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

  1. settings.py 中,设置:

STATIC_ROOT = 'static'

  1. 运行python manage.py collectstatic,这会将Django admin静态文件复制到/path/to/project/static/

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

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

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

【讨论】:

  • 别名应该是项目根目录,不需要静态。对我来说这有效--> alias /path/to/project
【解决方案2】:

在 Django 1.4 中,ADMIN_MEDIA_PREFIX 已弃用。以下是我为赶上这些最近的 Django 变化而遵循的步骤:

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

  2. settings.py 中定义STATIC_URL — 没有它,静态文件应用程序将无法运行。在使用runserver 时,它们会得到神奇的处理,但是当您部署时,这需要是浏览器可以获取这些资源的位置。

我想这就是它的全部。

【讨论】:

  • 对我来说,只需在 INSTALLED_APPS(在 settings.py 中)包含“django.contrib.staticfiles”即可解决问题。关于我的环境的其他所有内容与 django 生成的默认项目基本相同。
【解决方案3】:

我正在使用 Django 1.4.3

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

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

现在效果很好。

【讨论】:

  • 又快又脏。也为我工作。
  • 也可以在配置文件中添加Alias /static/admin /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin
  • Kinka 的方式是最好的!谢谢!
  • 符号链接ln -s /usr/local/lib/python2.7/django/contrib/admin/static/admin admin 是另一种选择
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    您需要在 ADMIN_MEDIA_PREFIX 设置中添加一个斜杠。

    改为:

    ADMIN_MEDIA_PREFIX = '/static/admin/' 
    

    【讨论】:

    • 谢谢你,但这个错误在其他地方,与我的开发环境有关。
    • 奇怪,如果我没有斜杠,管理模板会完全出错(链接是{{ ADMIN_MEDIA_PREFIX }}css/etc)。
    【解决方案6】:

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

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

    【讨论】:

      【解决方案7】:

      我正在使用 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 中已有其他项目,您可能希望追加到列表中,而不是覆盖它。

      【讨论】:

        【解决方案8】:

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

        DEBUG = False # debug false mod not working css

        【讨论】:

          【解决方案9】:

          一种解决方案可能是将您的本地 IP 添加到 settings.py 中的 ALLOWED_HOSTS 列表中

          例如

          CURRENT_IP = '192.168.0.123'
          ALLOWED_HOSTS = ['127.0.0.1', 'localhost', '0.0.0.0', CURRENT_IP]
          

          【讨论】:

          • 请解释一下,我认为这不相关?
          【解决方案10】:

          你需要

          urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
          

          【讨论】:

            【解决方案11】:

            只需在 settings.py 中更改一件事

            DEBUG = False # not working if you are not serve your static files for production.
            

            改变一下

            DEBUG = True 
            

            【讨论】:

              【解决方案12】:

              在 settings.py 中 不要将元组用于

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

              你应该像这样使用列表

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

              【讨论】:

                猜你喜欢
                • 2011-07-29
                • 2015-12-12
                • 2011-06-23
                • 2021-10-14
                • 1970-01-01
                • 2018-03-30
                • 1970-01-01
                • 1970-01-01
                • 2018-11-09
                相关资源
                最近更新 更多