statics serve muestra mostrar manejo img imagenes guardar python django static-media

python - serve - mostrar imagenes django



Sirviendo medios estáticos durante el desarrollo de Django: ¿Por qué no MEDIA_ROOT? (3)

Directamente de los comentarios en settings.py ...

MEDIA_ROOT

MEDIA_ROOT es la ruta absoluta al directorio que contiene medios como /home/media/media.lawrence.com/ .

MEDIA_URL

MEDIA_URL es la URL que maneja los medios servidos desde MEDIA_ROOT . Asegúrese de usar una barra inclinada al final si hay un componente de ruta (opcional en otros casos). Ejemplos: " http://media.lawrence.com ", " http://example.com/media/ ".

Por lo tanto, para MEDIA_ROOT esos ... MEDIA_ROOT es donde viven los archivos físicamente en su sistema, y MEDIA_URL es donde se asignan esos archivos. En el desarrollo, esto podría no ser siempre accesible, y en la mayoría de los casos, su entorno de desarrollo y su entorno de producción no son los mismos, y es algo que tendrá que regresar y cambiar. La otra cosa es que NO ES UNA BUENA PRÁCTICA cuando Django no fue diseñado para ofrecer contenido estático para ti.

Si va a usar esto en desarrollo, le sugiero que use el método de limitarlo a DEBUG = True . Decirle a Django que sirva contenido estático desde una ubicación temporal mientras está en desarrollo cuando DEBUG está configurado en True es una práctica mucho mejor y más segura. NO vas a poner tu sitio en producción con DEBUG , ¿verdad? Bueno, al menos no deberías.

Así es como lo implementé:

settings.py:

STATIC_DOC_ROOT = os.path.join(os.getcwd(), ''site_media'')

urls.py:

from django.conf import settings ## debug stuff to serve static media if settings.DEBUG: urlpatterns += patterns('''', (r''^site_media/(?P<path>.*)$'', ''django.views.static.serve'', {''document_root'': settings.STATIC_DOC_ROOT}), )

De esta manera, cualquier proyecto en el que esté trabajando tiene un directorio site_media dentro de él con todos los medios necesarios. En desarrollo, es autónomo y no tengo que voltear ningún bit en la configuración excepto para DEBUG , que de todos modos estaría haciendo.

Leí esta guía sobre el servicio de medios estáticos con Django durante el desarrollo.

Noté que MEDIA_URL y MEDIA_ROOT no se usaron en esto. ¿Por qué? ¿Cual es la diferencia?

Intenté hacerlo con MEDIA_URL y MEDIA_ROOT , y obtuve resultados extraños.


En una situación de producción, deseará que sus medios se sirvan desde su servidor web front-end (Apache, Nginx o similares) para evitar una carga adicional en el proceso Django / Python. El MEDIA_URL y MEDIA_ROOT se usan generalmente para esto.

Al ejecutar el servidor de desarrollo incorporado, deberá configurar la url correcta en su archivo url.py. Normalmente uso algo como esto:

from django.conf import settings urlpatterns += patterns('''', (r''^media/(?P<path>.*)$'', ''django.views.static.serve'', {''document_root'': settings.MEDIA_ROOT}), )

Que recoge el MEDIA_ROOT de su archivo de configuración, lo que significa que funciona para el desarrollo y en vivo.


Los documentos de Django recomiendan el siguiente enfoque que he modificado para mi caso de uso:

urlpatterns = [ # url patterns ] from django.conf import settings if settings.DEBUG: from django.conf.urls.static import static urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Nota: lo anterior asume que has configurado tu MEDIA_URL y MEDIA_ROOT correctamente

... y aquí está el enlace djangodocs .