python django website static url-pattern

python - ¿Por qué no puedo hacer que mi dir estático funcione con django 1.3?



website static (3)

Debes configurar STATIC_URL en settings.py

En tu caso tiene que ser

STATIC_URL = ''/static/''

Este problema es muy simple, pero no puedo entenderlo

agregado a mis patrones url

url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {''document_root'': ''/home/user/www/site/static''})

donde mi main.css es: /home/user/www/site/static/css/main.css

cuando accedo a http: // localhost: 8000 / static /

Obtengo: 404: los índices del directorio no están permitidos aquí.

cuando accedo a http: // localhost: 8000 / static / css / main.css

Obtengo: 404: no se pudo encontrar ''css / main.css''

¿Qué estoy haciendo mal?

Arreglado:

url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {''document_root'': settings.STATIC_ROOT } ),

en settings.py

# Absolute path to the directory static files should be collected to. # Don''t put anything in this directory yourself; store your static files # in apps'' "static/" subdirectories and in STATICFILES_DIRS. # Example: "/home/media/media.lawrence.com/static/" STATIC_ROOT = os.path.join(CURRENT_PATH, ''static'') #==''/home/user/www/site/static'' # URL prefix for static files. # Example: "http://media.lawrence.com/static/" STATIC_URL = ''/mystatic/''

Como pueden ver, lo único que realmente cambié fue de STATIC_URL = ''/ static /'' a STATIC_URL = ''/ mystatic /''

nota: cuando llegué a http: // localhost: 8000 / mystatic ... recibo los mismos errores que antes

Pensé que se suponía que STATIC_URL era ''/ static /'' para que pudieras usar {{STATIC_URL}} en tus plantillas ... Realmente no entiendo por qué funcionó esta solución y por qué tuve que hacer el cambio que hice ....

¿Por qué funciona esto?


Si está utilizando el servidor web de desarrollo integrado (es decir, lo ejecuta con manage.py runserver ), Django se encargará de los archivos estáticos mientras está en desarrollo.

Tenga en cuenta que STATIC_ROOT es la ruta en la que Django recopila los archivos estáticos, en lugar de la ruta desde la que sirve los archivos. ¡No debe mantener STATIC_ROOT usted mismo! Puede leer más sobre eso en la documentación de Django .

En general, no necesita agregar django.views.static.serve a sus urls, con el servidor incorporado.

Los archivos estáticos deben colocarse en otro lugar, además de STATIC_ROOT . Puede colocarlos en la ruta myapp/static (es decir, en el archivo estático de la aplicación individual). También puede dedicar una carpeta estática para todo el proyecto (por ejemplo, /path/to/project/proj_settings ) y actualizar STATICFILES_DIRS en settings.py para que sea:

STATICFILES_DIRS = ( # Put strings here, like "/home/html/static" or "C:/www/django/static". # Always use forward slashes, even on Windows. # Don''t forget to use absolute paths, not relative paths. os.path.join(PROJECT_DIR, ''proj_static''), )

Luego puede colocar su archivo css/main.css en /proj_static/css/main.css . El servidor web incorporado de Django será servidor /static/ desde allí.

Mientras está en producción, debe recopilar todos los archivos estáticos en STATIC_ROOT , ejecutando manage.py collectstatic . Luego puede servir esa carpeta directamente a través de su servidor web (por ejemplo, nginx, Apache), en lugar de a través de Django.


principalmente dos pasos:

  1. compruebe la ruta STATIC_ROOT:

    ¿Existe el archivo? /home/user/www/site/static/css/main.css si no, debes ejecutar "python manage.py collectstatic" para copiar el archivo estático a la ruta de STATIC_ROOT si "collectstatic" no puede copiar archivos css a la ruta de acceso de STATIC_ROOT, entonces debe verificar la ruta de source css en "STATICFILES_DIRS"
  2. en develope env, (use runserver para iniciar el servidor web), asegúrese de que:

    a) settings.py: INSTALLED_APPS incluyen: ''django.contrib.staticfiles'' b) urls.py: urlpatterns + = staticfiles_urlpatterns ()

Supongo que no configuró el paso 2.b. su método debería estar bien, pero está codificado,

url(r''^static/(?P<path>.*)$'', ''django.views.static.serve'', {''document_root'': settings.STATIC_ROOT } ),

En el documento de django ya se menciona:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns urlpatterns += staticfiles_urlpatterns()