Hago un sitio de administración de Django usando la versión de desarrollo de Django
Pero no tiene estilo CSS:
¿que puedo hacer?
Gracias
Hago un sitio de administración de Django usando la versión de desarrollo de Django
Pero no tiene estilo CSS:
¿que puedo hacer?
Gracias
Respuestas:
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.
Después de configurar su STATIC_ROOT
y STATIC_URL
, es posible que deba ejecutar
python manage.py collectstatic
STATIC_ROOT
y 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"
ADMIN_MEDIA_PREFIX
está obsoleto ahora, utilícelo STATIC_URL
en 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.
static/admin
dentro static/css/
, puedo acceder a los archivos css. Entonces, parece que puedo acceder a los archivos css solo si están dentro del, static/files
pero el collectstatic no los coloca allí. Por supuesto, mover la carpeta manualmente simplemente no funciona porque las plantillas continúan apuntando static/admin
.
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',
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. :(
En /project_name/project_name/settings.py
debe configurar STATIC_URL
para decirle a su sitio qué URL utilizar para archivos estáticos.
Luego, configúrelo STATIC_ROOT
para que sea una carpeta en su sistema de archivos que no sea la misma que cualquiera de sus directorios enumerados en la STATICFILES_DIRS
lista.
Una vez STATICFILES_ROOT
configurado, se ejecutará python manage.py collectstatic
desde 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_DIRS
lista. 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:
STATIC_ROOT
a la STATICFILES_DIRS
lista. Esto permitirá a los buscadores de archivos estáticos en django localizar todos los archivos estáticos.STATICFILES_DIRS
a 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_ROOT
en el directorio que había usado para mis propios archivos estáticos. Eso me resolvió el problema.
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/admin
que 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.
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á.
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
Content-Type: text/plain
, y no se están renderizando en la página.
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)
Mi problema se resolvió creando un nuevo entorno virtual para el proyecto, antes de eso, estaba usando un intérprete de Python a nivel general del sistema.
$ mkvirtualenv myproject
Referencia: https://docs.djangoproject.com/en/2.1/howto/windows/
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!
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
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í.
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/;
}
esto funciona bien y fácilmente. Moví (manualmente) la carpeta. solo tiene que copiar su static/admin
desde 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
Configuración de archivos estáticos
Asegúrese de que django.contrib.staticfiles
esté 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