开发者

Django Admin CSS missing

开发者 https://www.devze.com 2023-03-31 13:00 出处:网络
I\'ve been messing around with the new collectstatic command and have got it working for my normal pages. That is to say, I am able to load my css at this location http://localhost:8000/static/css/mai

I've been messing around with the new collectstatic command and have got it working for my normal pages. That is to say, I am able to load my css at this location http://localhost:8000/static/css/main.css. However, the css for my django admin doesn't seem to be showing up.

When I navigate to the admin css location at http://localhost:8000/static/admin/css/base.css, I'm getting a 404 page not found with the following error: /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/css/base.css" does not exist. Looking in django-trunk, I never had the /home/nai/GitProjects/cats/django-trunk/django/contrib/admin/media/ folder to begin with.

Is that weird?

In any case, in my static folder, there is an admin folder with the accompanying css, img and js folders which was created when I ran collectstatic and the url of t开发者_JAVA百科he base.css seems to be pointing to that location.

This is happening on my django development server. Here are some snippets to aid in the bug hunt:

urls

 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

I think it might be something to do with line 40 in my URLS file but changing media-admin to static/admin didnt help.

settings

     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 recommends that you deploy static files with a web server other than wsgi.

  1. In settings.py, set:

STATIC_ROOT = 'static'

  1. Run python manage.py collectstatic, which will copy the Django admin static files to /path/to/project/static/

  2. Configure your static file server. If you use Nginx, you could add this config:

    location /static/ {                              
        alias /path/to/project/static/;  
        expires modified +1w;                        
    }  
    
  3. Reload your web server

You should now have access to the static files.


In Django 1.4 ADMIN_MEDIA_PREFIX is deprecated. Here are the steps I followed to catch up with these somewhat recent Django changes:

  1. in settings.py, add django.contrib.staticfiles to INSTALLED_APPS

  2. in settings.py define STATIC_URL — the staticfiles app won't run without it. While using runserver they'll get handled magically, but when you deploy, this needs to be a location where those resources can be fetched by a browser.

I think that's all there was to it.


I'm using Django 1.4.3

What did NOT work for me: No matter how much I edited ADMIN_MEDIA_PREFIX in settings.py I noticed no change in the HTML generated for the Django Admin pages. It always says /media/admin/base.css when I view the source.

What DID work for me. Copied the 'admin' folder from /django/contrib/admin/static/ and pasted it into my projects 'media' folder

Now it works great.


It seems dumb, but I actually had this exact issue and the solution was to set DEBUG=False to DEBUG=True on my local dev environment. When debug is set to False, it thinks it's in a production environment which relies on a place to put static files, such as /var/www/html/static, whereas the debug set to True just uses the local directory.


Also make sure that AppDirectoriesFinder is not commented, happens when you're trying to customize your own app structure. Unfortunatelly it's pointless to seek such information in official docs.

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


just change one thing in settings.py

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

just change

DEBUG = True 


You need a trailing slash in your ADMIN_MEDIA_PREFIX setting.

Change to:

ADMIN_MEDIA_PREFIX = '/static/admin/' 


in my project, the solution is in settings.py, set:

DEBUG = False # debug false mod not working css


I'm using chef to auto-build my django server on an AWS Ubuntu server. This post helped, but what I wound up doing was to add the directory to the package admin static pages in a 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/',)

This resulted in local_settings.py having:

STATICFILES_DIRS = ('/var/lib/geoq/local/lib/python2.7/site-packages/django/contrib/admin/static/',)

Note, that if you have other items already in your STATICFILES_DIRS, you might want to append to the list, rather than overwriting it.


One solution might be to add your local IP to the ALLOWED_HOSTS list in settings.py

e.g.

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


you need

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


I don't know how it was resolved, but I took these steps when I encountered the same problem. I simply add these line in settings.py.

ADMIN_MEDIA_PREFIX = '/static/admin/'

STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder','django.contrib.staticfiles.finders.AppDirectoriesFinder','compressor.finders.CompressorFinder', )

i hope this will help you all.


In settings.py Don't use tuple for the

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

you should use list,like this

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

0

精彩评论

暂无评论...
验证码 换一张
取 消