por qué mi sitio de administración de django no tiene el estilo css


85

Hago un sitio de administración de Django usando la versión de desarrollo de Django

Pero no tiene estilo CSS:

texto alternativo

¿que puedo hacer?

Gracias


2
¿Hay un estilo al que se hace referencia que no se carga?
Pekka

1
Necesita configurar el servidor de desarrollo para que sirva archivos estáticos: docs.djangoproject.com/en/1.2/howto/static-files
Adam Vandenberg

1
@Pekka, sí, es el estilo predeterminado de django, está en D: \ Python25 \ Lib \ site-packages \ django \ contrib \ admin \ media
zjm1126

1
Tuve el mismo problema de que el contenido estático de administración no se podía ver, pero con nginx (en lugar del entorno de desarrollo). Básicamente, verifique su archivo de configuración nginx y asegúrese de que sea la ubicación de su 'collectstatic'. Detalles aquí: serverfault.com/questions/403264/…
Will

Respuestas:


14

Django no ofrece archivos estáticos por sí solo. Tienes que decirle dónde están los archivos.

El ADMIN_MEDIA_PREFIX en settings.py señalará a Django en la ubicación correcta.

Dado que está utilizando la versión de desarrollo, querrá el documento de desarrollo específico para archivos estáticos . El enlace de Adam lo llevará a la versión 1.2.


11
Buena respuesta pero ahora obsoleta y ausente de settings.py. Lea a continuación para obtener más soluciones actualizadas.
RussellStewart

Tengo el mismo error pero en Flask, puse mi css dentro de la carpeta estática. Y use jinj2 2 suntax ie {{url_for ('static', filename = 'css / style.css')}}, pero aún en mi computadora portátil tengo este error. Obligé a actualizar la página pero el problema persiste. Por favor, ayuda
Salman Mushtaq

67

Después de configurar su STATIC_ROOTy STATIC_URL, es posible que deba ejecutar

python manage.py collectstatic

1
Esto también funciona en 1.5.2. No tuve que cambiar ni agregar ningún archivo o código
lukik

1
Quizás sea útil para alguien: deberías usar el mismo nombre para STATIC_ROOTy STATIC_URL, ejemplo: combiné "staticfiles" y "static" , usé STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"y STATIC_URL="/static/". Mi aplicación funcionó bien, pero no se pudieron encontrar los archivos de administración. así que cámbielo a "staticfiles" o a "static"
elano7

17

ADMIN_MEDIA_PREFIXestá obsoleto ahora, utilícelo STATIC_URLen su lugar. La STATIC_URL = '/static/'configuración en settings.py debería hacer el trabajo. Tratar:

import os.path  import sys

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))

y entonces:

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

Funciona en Django 1.4 pre-alpha SVN-16920.


1
Esto tampoco funciona para mí. Noto que si muevo (manualmente) la carpeta static/admindentro static/css/, puedo acceder a los archivos css. Entonces, parece que puedo acceder a los archivos css solo si están dentro del, static/filespero el collectstatic no los coloca allí. Por supuesto, mover la carpeta manualmente simplemente no funciona porque las plantillas continúan apuntando static/admin.
toto_tico

Me funcionó al intentar ejecutar la interfaz de administración creada con Django v1.2, probada en 1.3 y luego re-implementada en v1.4. Ejecutando Ubuntu 12.04 LTE
Adam Lewis

9

También encontré este problema siguiendo el Tutorial del libro de Django. En el Capítulo 5 | Instalación del modelo, el libro dice al referirse a las INSTALLED_APPS predeterminadas: "Comente temporalmente las seis cadenas colocando un carácter de almohadilla (#) delante de ellas". http://www.djangobook.com/en/2.0/chapter05.html

Luego, en el Capítulo 6, el Libro le dice al lector que descomente 4 de esas 6 líneas - "tenga en cuenta que comentamos estas cuatro entradas INSTALLED_APPS en el Capítulo 5. Descomente ahora".

Pero la línea statcifiles es lo que se necesita para restaurar CSS en la página de administración, así que descomente que 'django.contrib.staticfiles',


Descomentar 'django.contrib.staticfiles' en el archivo settings.py como se sugirió anteriormente también funcionó para mí. 'django.contrib.staticfiles' debería estar presente por defecto en su archivo settings.py en INSTALLED_APPS. Gracias Chris por tu sugerencia.
user2471242

También llegué aquí desde el libro de Django. Esa eliminación de un carácter lo hace.
pbarill

8

Leí varios otros hilos tratando de arreglar esto ... recurrí a un alias como en otros hilos. Esto supone que su propia aplicación personalizada está sirviendo archivos estáticos correctamente, lo que indicaría que su STATIC_ROOT y STATIC_URL tienen la configuración adecuada.

STATIC_ROOT = ''
STATIC_URL = '/static/'

Entonces (desde su directorio estático):

ubuntu@ip-1-2-3-4:/srv/www/mysite.com/app_folder/static$ sudo ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/ admin

Espero que esto ayude a alguien ... hay muchos hilos sobre este tema. :(


esta es la respuesta funciona como encantos gracias taylor.Bien hecho
Spikie

3

En /project_name/project_name/settings.pydebe configurar STATIC_URLpara decirle a su sitio qué URL utilizar para archivos estáticos.

Luego, configúrelo STATIC_ROOTpara que sea una carpeta en su sistema de archivos que no sea la misma que cualquiera de sus directorios enumerados en la STATICFILES_DIRSlista.

Una vez STATICFILES_ROOTconfigurado, se ejecutará python manage.py collectstaticdesde el directorio del proyecto.

Esto copiará todos los archivos estáticos del administrador y todos los archivos en cualquier otra carpeta que se enumere en la STATICFILES_DIRSlista. Básicamente, esto coloca todos sus archivos estáticos en un solo lugar para que pueda moverlos a su CDN cuando implemente su sitio. Si eres como yo y no tienes un CDN, tienes dos opciones:

  1. Agregue la carpeta que estableció como STATIC_ROOTa la STATICFILES_DIRSlista. Esto permitirá a los buscadores de archivos estáticos en django localizar todos los archivos estáticos.
  2. Mueva toda la carpeta de archivos estáticos a otro lugar de su sistema de archivos y diríjase STATICFILES_DIRSa incluir esa nueva ubicación.

No hago comentarios sobre seguridad con esta respuesta, es solo la forma en que he podido desarrollar con mi servidor web para proyectos pequeños. Espero que desee un CDN como sugiere django si está haciendo algo a mayor escala.

ACTUALIZACIÓN: Acabo de encontrarme con este problema y este método no hizo lo que creo que quieres. Lo que terminó funcionando para mí fue que después de ejecutar collectstatic, simplemente copié los archivos estáticos de administrador que puse STATICFILES_ROOTen el directorio que había usado para mis propios archivos estáticos. Eso me resolvió el problema.


3

Además de que muchas de las otras respuestas son útiles, tuve un problema que aún no se ha detectado. Después de actualizar de Django 1.3 a 1.6, mi directorio de archivos estáticos tenía un enlace simbólico roto a los archivos estáticos de administración de django.

Mi settings.py se configuró con:

STATICFILES_DIRS = (
    '/var/www/static/my-dev',
)

Según esta respuesta ,

Django ahora esperará encontrar los archivos estáticos de administrador en la URL / admin /.

Tenía un enlace simbólico /var/www/static/my-dev/adminque estaba configurado para:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/

Esa ubicación ya no existe en django 1.6, así que actualicé el enlace a:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/

Y ahora mi sitio de administración funciona correctamente.


2

Si está utilizando el servidor Apache para alojar su sitio django, debe asegurarse de que el alias estático apunte a su directorio / a sitio / site_media / static /. Si sus archivos estáticos están en el directorio / del sitio / sitio / sitio_media / estático /, la configuración de alias de Apache anterior no funcionará.


2

Mientras seguía el tutorial de Django, tuve un problema similar y, en mi caso, el problema fue el tipo MIME utilizado por el servidor de desarrollo al entregar archivos css.

El tipo MIME servido fue 'application / x-css', lo que llevó al siguiente mensaje de advertencia en Chrome (en la pestaña 'Red' de las herramientas para desarrolladores):

Recurso interpretado como hoja de estilo pero transferido con la aplicación tipo MIME / x-css: " http://127.0.0.1:8000/static/admin/css/base.css "

La solución alternativa que encontré: cambiar el tipo MIME que se servirá agregando las siguientes líneas al archivo manage.py de la aplicación web de django:

import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'

Nota: funcionó para mí con Django 1.7.4 en Python 2.7 y Chrome 40.0


Intenté esto con Django 2.2.1 y no funciona. Los archivos .css estáticos de mi panel de administración están siendo servidos por nginx con el código HTTP 200, pero Chrome dice que están entrando como Content-Type: text/plain, y no se están renderizando en la página.
user5359531

2

El mismo tipo de problema que encontré al desarrollar un sitio en django-1.10.5 y python-2.7.13. Pero en mi firefox-51 y chrome, la página de inicio de sesión pudo obtener el CSS, pero aún no había estilo. Pero extrañamente estaba funcionando en IE-8 ..

Intenté hacer todo lo posible mencionado aquí y adecuado a mi conjunto de versiones de software. Ninguno funcionó.

Pero cuando probé el mismo sitio en otro sistema que tenía python-2.7.8, funcionó.

Acabo de publicarlo si puede ayudar a alguien ...

editado: más tarde descubrí que en python-2.7.13, escribir las siguientes dos líneas en settings.py (además de borrar el caché del navegador) había hecho el truco

import mimetypes
mimetypes.add_type("text/css", ".css", True)


1

Asegúrese de que 'django.contrib.staticfiles'esté en su INSTALLED_APPSen su configuración.py


1

correr: python manage.py collectstatic

Agregue esta línea a Vhost que se encuentra en: /etc/apache2/sites-available/000-default.conf

Alias ​​/ static / admin / /var/www/html/example.com/static/admin

Aquí está la configuración completa de Vhost para la configuración de django

<VirtualHost *:80>
        ServerName gautam.tech
        ServerAlias www.gautam.tech

        WSGIDaemonProcess gautam.tech python-path=/var/www/html/gautam.tech python-home=/var/www/html/gautam.tech/venv
        WSGIProcessGroup gautam.tech
        #Your static files location
        Alias /static /var/www/html/gautam.tech/static
        Alias /media/ /var/www/html/gautam.tech/media
        Alias /static/admin/ /var/www/html/gautam.tech/static/admin

        <Directory /var/www/html/gautam.tech/static>
                Require all granted
        </Directory>

        <Directory /var/www/html/gautam.tech/media>
                       Require all granted
        </Directory>

        WSGIScriptAlias / /var/www/html/gautam.tech/myproject/wsgi.py

        DocumentRoot /var/www/html/gautam.tech
        <Directory /var/www/html/gautam.tech>
                <Files wsgi.py>
                        Require all granted
                </Files>
        </Directory>

        CustomLog /var/www/html/gautam.tech/access.log combined
        ErrorLog /var/www/html/gautam.tech/error.log
</VirtualHost>

¡Esto funcionará seguro!


Muy buena respuesta. Solo tuve que ejecutar el comando collectstatic.
PowerAktar

0

Si tiene un valor establecido en settings.py para STATICFILES_DIRS y la carpeta declarada no existe o está en una ubicación incorrecta, hará que el administrador no tenga estilo, por ejemplo, al definir STATICFILES_DIRS = (os.path.join (BASE_DIR, "static" )) y la carpeta estática no existe


0

Al fallar después de probar miles de sugerencias, finalmente encontré una solución que ayudó. Esto es lo que probé y lo que estaba usando. Estoy usando el servidor web django-1.11 y nginx. En primer lugar, me aseguré de que mis archivos CSS / js no reciban 404 en la consola del navegador. Después de eso, pude ver una advertencia.

Recurso interpretado como hoja de estilo pero transferido con texto de tipo mime / plano

Encontré base.html en las plantillas de administración y lo eliminé

type="text/css"

y ahora las líneas se ven así:

<link rel="stylesheet"  href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" /> 

Esto solucionó el problema para mí.


0

Si el problema está en un servidor dev / test / prod y usa Nginx, siga los pasos a continuación.

  • establezca las configuraciones en settings.py como algo a continuación

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Ejecute el siguiente comando para crear archivos css y js en una carpeta estática

    $ python manage.py collectstatic
    
  • config en / etc / nginx / sites-enabled / example (Nginx) para servir archivos estáticos

    location /static/ {
            alias /project/root/folder/static/;
    }
    

0

esto funciona bien y fácilmente. Moví (manualmente) la carpeta. solo tiene que copiar su static/admindesde el directorio del proyecto principal y pegarlo en public_html static/ si no hay una carpeta estática, debe ejecutar el siguiente comando en la terminal

python manage.py collectstatic

aquí tienes el trabajo css del administrador de Django


0

Configuración de archivos estáticos Asegúrese de que django.contrib.staticfilesesté incluido en su INSTALLED_APPS .

En su archivo settings.py, defina STATIC_URL, por ejemplo:

STATIC_URL = '/static/'

para más detalles archivos estáticos

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.