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
yMEDIA_ROOT
correctamente
... y aquí está el enlace djangodocs .