He visto varias publicaciones para este problema pero no encontré mi solución.
Estoy tratando de servir archivos estáticos dentro de mi entorno de desarrollo Django 1.3.
Aquí están mis configuraciones
...
STATIC_ROOT = '/home/glide/Documents/django/cbox/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/static/',
)
...
Mi urls.py
urlpatterns = patterns('',
...
url(r'^static/(?P<path>.*)$', 'django.views.static.serve',
{'document_root', settings.STATIC_ROOT}
),
...
);
Mi directorio / home / glide / Documents / django / cbox / static / es como
css
main.css
javascript
image
Recibo un error 404 cuando intento acceder a http://127.0.0.1:8000/static/css/main.css .
¿Tengo que especificar patrones para css, javascript e imágenes individualmente?
fuente
from django.conf import settings
supuestoBASE_DIR
const incorporado en lugar deSITE_ROOT
y funciona.Puede haber solo dos cosas
settings.py
que le causen problemas.1)
STATIC_URL = '/static/'
2)
STATICFILES_DIRS = ( os.path.join(BASE_DIR, "static"), )
y sus archivos estáticos deben estar en el directorio estático que está en el mismo directorio que el archivo de configuración del proyecto.
Incluso entonces, si sus archivos estáticos no se cargan, la razón es que es posible que haya mantenido
DEBUG = False
cámbielo a True (estrictamente solo para desarrollo). En producción, simplemente cambie
STATICFILES_DIRS
a cualquier ruta donde residan los archivos estáticos.fuente
El servicio de archivos estáticos se puede lograr de varias formas; aquí están mis notas para mí mismo:
static/my_app/
directorio amy_app
(ver la nota sobre el espacio de nombres a continuación)The STATICFILES_DIRS setting should not contain the STATIC_ROOT setting
)Prefiero la primera forma, y una configuración que se parezca a la forma definida en la documentación , por lo que para servir el archivo
admin-custom.css
para anular un par de estilos de administración, tengo una configuración como la siguiente:# settings.py STATIC_ROOT = os.path.join(BASE_DIR, 'static') STATIC_URL = '/static/'
Esto luego se usa en la plantilla así:
# /templates/admin/base.html {% extends "admin/base.html" %} {% load static %} {% block extrahead %} <link rel="stylesheet" href="{% static "my_app/admin-custom.css" %}"> {% endblock %}
Al implementar, ejecuto
collectstatic
y sirvo archivos estáticos con nginx.Los documentos que me aclararon toda la confusión:
fuente
Si su URL estática es correcta pero aún así:
Quizás su problema WSGI.
➡ Config WSGI sirve tanto al entorno de desarrollo como al entorno de producción
==========================project/project/wsgi.py========================== import os from django.conf import settings from django.contrib.staticfiles.handlers import StaticFilesHandler from django.core.wsgi import get_wsgi_application os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings') if settings.DEBUG: application = StaticFilesHandler(get_wsgi_application()) else: application = get_wsgi_application()
fuente
STATIC_ROOT
líneastatic
carpeta en un directorio diferente. Supongamos que el directorio es:project\static
Ahora actualice:STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'project/static/') ] STATIC_ROOT = os.path.join(BASE_DIR, 'static')
Hagas lo que hagas, el punto principal es
STATICFILES_DIRS
ySTATIC_ROOT
no debe contener el mismo directorio.Sé que ha pasado mucho tiempo, pero espero que los nuevos amigos puedan obtener ayuda.
fuente
Otro error puede ser no tener su aplicación en la
INSTALLED_APPS
lista como:INSTALLED_APPS = [ # ... 'your_app', ]
Sin tenerlo, puede enfrentar problemas como no detectar sus archivos estáticos, básicamente todos los archivos que involucran su aplicación. Aunque puede ser correcto como se sugiere en la respuesta correcta usando:
STATICFILES_DIRS = (adding/path/of/your/app)
Puede ser uno de los errores y debe revisarse si aparece este error.
fuente
Resuelvo este problema agregando el nombre de mi proyecto en INSTALLED_APPS.
fuente
Descubrí que moví mi
DEBUG
configuración en mi configuración local para que se sobrescribiera con unFalse
valor predeterminado . Básicamente, busque para asegurarse de que la configuración DEBUG sea realmente falsa si está desarrollando conDEBUG
yrunserver
.fuente
En su comando de tipo cmd,
python manage.py findstatic --verbosity 2 static
le dará el directorio en el que Django está buscando archivos estáticos. Si ha creado un entorno virtual, habrá una carpeta estática dentro de esta carpeta virtual_environment_name.VIRTUAL_ENVIRONMENT_NAME\Lib\site-packages\django\contrib\admin\static
. Al ejecutar el comando 'findstatic' anterior, si Django le muestra esta ruta, simplemente pegue todos sus archivos estáticos en este directorio estático. En su archivo html, use la sintaxis JINJA para href y verifique otros css en línea. Si todavía hay una imagen src o url después de proporcionar la sintaxis JINJA, antepóngalo con '/ static'. Esto funcionó para mí.fuente
TEMPLATE_DIR=os.path.join(BASE_DIR,'templates') STATIC_DIR=os.path.join(BASE_DIR,'static') STATICFILES_DIRS=[STATIC_DIR]
fuente
Podría haber las siguientes cosas en su settings.py:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': ["templates"],
'APP_DIRS': True,
'OPTIONS': {
# ... algunas opciones aquí ... .
},
},]
O
STATIC_URL = '/ estático /'
O
STATICFILES_DIRS = (os.path.join (BASE_DIR, "static"),)
fuente
Si ha agregado el
django-storages
módulo (para admitir la carga de archivos a S3 en su aplicación django, por ejemplo), y si, como yo, no leyó correctamente la documentación de este módulo , simplemente elimine esta línea de susettings.py
:STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
De lo contrario, hará que sus activos estáticos NO se busquen en su máquina local, sino de forma remota en el depósito S3, incluido el CSS del panel de administración y, por lo tanto, romperá efectivamente el CSS del panel de administración.
fuente
STATICFILES_DIRS
se utiliza en el desarrollo ySTATIC_ROOT
en la producción ,STATICFILES_DIRS
ySTATIC_ROOT
no debe tener el mismo nombre de carpeta,Si necesita usar exactamente la misma carpeta estática en desarrollo y producción, pruebe este método
incluir esto en
settings.py
import socket HOSTNAME = socket.gethostname() # if hostname same as production url name use STATIC_ROOT if HOSTNAME == 'www.example.com': STATIC_ROOT = os.path.join(BASE_DIR, "static/") else: STATICFILES_DIRS = [ os.path.join(BASE_DIR, 'static/'), ]
fuente
{'document_root', settings.STATIC_ROOT}
necesita ser{'document_root': settings.STATIC_ROOT}
o obtendrás un error como
dictionary update sequence element #0 has length 6; 2 is required
fuente