Django 1.3 mostrar imagenes

3,665 views
Skip to first unread message

Albertocc

unread,
Sep 28, 2011, 1:07:18 PM9/28/11
to Django-es
Hola
Soy novato en Django y me gustaria aprender a usarlo
he buscado por internet y mirado la documentacion del djangoproject y
pone esto

<img src="{{ STATIC_URL }}images/hi.jpg" />

yo tengo la ruta a las imagenes en el STATIC_URL

STATIC_URL = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA\imagenes'

en el template tengo esto

{% for Figura in lista %}
<tr>
<td>
{{ Figura.nombre }}</td>
<td> <A HREF={{STATIC_URL}}/{{ Figura.imagen }} ><IMG
SRC="{{STATIC_URL}}/{{ Figura.imagen }}" > </A></td>
<td>
{{STATIC_URL}}/{{ Figura.imagen }}</td>
</tr>
{% endfor %}

con esto me pone la ruta completa no la relativa con lo que el enlace
da error no sabe interpretarlo el navegador

si quito el Static_url

entonces la ruta es la ruta de la pagina mas MEDIA/NOMBRE IMAGEN.JPG
pero tampoco muestra la imagen

Podriais orientarme por donde buscar para ver como gestionar las
imagenes en django

gracias

saludos

alberto

Mario César

unread,
Sep 28, 2011, 2:11:15 PM9/28/11
to djan...@googlegroups.com
El 28/09/11 13:07, Albertocc escribi�:

> Hola
> Soy novato en Django y me gustaria aprender a usarlo
> he buscado por internet y mirado la documentacion del djangoproject y
> pone esto
>
> <img src="{{ STATIC_URL }}images/hi.jpg" />
>
> yo tengo la ruta a las imagenes en el STATIC_URL
>
> STATIC_URL = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
> \Django-1.3.1\COEPA\imagenes'

Estas confundiendo STATIC_URL con STATIC_ROOT

STATIC_URL = '/static/'
STATIC_ROOT = 'C:/Documents and Settings/Alberto/Mis documentos/HTML
/Django-1.3.1/COEPA/imagenes'


STATIC_URL hace disponible recursos de otras aplicaciones, estas sguro
que necesitas alterarlo? no estas pensando en MEDIA_URL?


Albertocc

unread,
Sep 29, 2011, 2:51:02 AM9/29/11
to Django-es
Hola Mario

Si el Media tengo la misma ruta que en static_url pero como no me iba
probe a poner en static porque las imagenes dicen que son estaticas
una cosa que se me olvido comentar es que dentro de la carpeta
imagenes hay otra que se llama media donde realmente estan las fotos

mi problema es que al poner esto

<td> <A HREF={{ Figura.imagen }} ><IMG
SRC="{{ Figura.imagen }}" > </A></td>
<td>

me crea una tabla con una fila por cada imagen y hasta ahi bien pero
la imagen y el enlace que crea es este
Media\Nombreimagen.jpg

entonces el explorador no sabe poner la imagen con esa ruta y al
pincharle en la foto

la barra de direcciones me pone

http://ip ordenador:puerto/Figuras/Media/nombreimagen.jpg

que imagino que yo tengo que capturar en el urls.py para mostrar la
foto

ando un poco perdido en ese paso el de que con la ruta Media
\imagen.jpg el navegador me muestre la foto

no tengo aqui el django esta tarde si quereis os pongo la estructura
de ficheros donde estan las cosas

gracias

alberto

Albertocc

unread,
Sep 29, 2011, 10:06:34 AM9/29/11
to Django-es
Este es el settings



# Django settings for COEPA project.

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
# ('Your Name', 'your_...@example.com'),
)

MANAGERS = ADMINS

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', # Add
'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'COEPA.db', # Or path to database
file if using sqlite3.
'USER': '', # Not used with sqlite3.
'PASSWORD': '', # Not used with sqlite3.
'HOST': '', # Set to empty string for
localhost. Not used with sqlite3.
'PORT': '', # Set to empty string for
default. Not used with sqlite3.
}
}

# Local time zone for this installation. Choices can be found here:
# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
# although not all choices may be available on all operating systems.
# On Unix systems, a value of None will cause Django to use the same
# timezone as the operating system.
# If running in a Windows environment this must be set to the same as
your
# system time zone.
TIME_ZONE = 'Europe/Madrid'

# Language code for this installation. All choices can be found here:
# http://www.i18nguy.com/unicode/language-identifiers.html
LANGUAGE_CODE = 'es-es'

SITE_ID = 1

# If you set this to False, Django will make some optimizations so as
not
# to load the internationalization machinery.
USE_I18N = True

# If you set this to False, Django will not format dates, numbers and
# calendars according to the current locale
USE_L10N = True

# Absolute filesystem path to the directory that will hold user-
uploaded files.
# Example: "/home/media/media.lawrence.com/media/"
MEDIA_ROOT = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA\imagenes'

# URL that handles the media served from MEDIA_ROOT. Make sure to use
a
# trailing slash.
# Examples: "http://media.lawrence.com/media/", "http://example.com/
media/"
MEDIA_URL = ''

# 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 = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA'

# URL prefix for static files.
# Example: "http://media.lawrence.com/static/"
STATIC_URL = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA\imagenes'

# URL prefix for admin static files -- CSS, JavaScript and images.
# Make sure to use a trailing slash.
# Examples: "http://foo.com/static/admin/", "/static/admin/".
ADMIN_MEDIA_PREFIX = '/static/admin/'

# Additional locations of static files
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.
)

# List of finder classes that know how to find static files in
# various locations.
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
# 'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

# Make this unique, and don't share it with anybody.
SECRET_KEY = 'v$uq#z8vx$0k4o1-jo-465ky8k=f^6#ymc7rb3sn0ujswm)59f'

# List of callables that know how to import templates from various
sources.
TEMPLATE_LOADERS = (
'django.template.loaders.filesystem.Loader',
'django.template.loaders.app_directories.Loader',
# 'django.template.loaders.eggs.Loader',
)

MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)

ROOT_URLCONF = 'COEPA.urls'

TEMPLATE_DIRS = (
# Put strings here, like "/home/html/django_templates" or "C:/www/
django/templates".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
)

INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'globos',
# Uncomment the next line to enable the admin:
'django.contrib.admin',
# Uncomment the next line to enable admin documentation:
# 'django.contrib.admindocs',
)

# A sample logging configuration. The only tangible logging
# performed by this configuration is to send an email to
# the site admins on every HTTP 500 error.
# See http://docs.djangoproject.com/en/dev/topics/logging for
# more details on how to customize your logging configuration.
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'handlers': {
'mail_admins': {
'level': 'ERROR',
'class': 'django.utils.log.AdminEmailHandler'
}
},
'loggers': {
'django.request': {
'handlers': ['mail_admins'],
'level': 'ERROR',
'propagate': True,
},
}
}


Albertocc

unread,
Sep 29, 2011, 10:07:04 AM9/29/11
to Django-es
este es el uls.py


from django.conf.urls.defaults import patterns, include, url

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()
from COEPA.globos.views import Figura

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'COEPA.views.home', name='home'),
# url(r'^COEPA/', include('COEPA.foo.urls')),
(r'^Figuras/', Figura),


# Uncomment the admin/doc line below to enable admin
documentation:
# url(r'^admin/doc/', #include('django.contrib.admindocs.urls')),

# Uncomment the next line to enable the admin:
url(r'^admin/', include(admin.site.urls)),
)

Albertocc

unread,
Sep 29, 2011, 10:08:04 AM9/29/11
to Django-es
Esta es la plantilla


<html>
<head><title>Modelos</title><head>
<h1>Modelos</h1>
<body>
<table border=1>
<tr>
<td>Nombre</td>
<td>foto</td>

</tr>
{% for Figura in lista %}
<tr>
<td>
{{ Figura.nombre }}</td>
<td> <A HREF={{ Figura.imagen }} ><IMG
SRC="{{ Figura.imagen }}" > </A></td>
<td>
{{ Figura.imagen }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>

Albertocc

unread,
Sep 29, 2011, 10:09:01 AM9/29/11
to Django-es

Esta es la view.py

# Create your views here.
from django.shortcuts import render_to_response
from models import modelo

def Figura(request):
lista = modelo.objects.all()
return render_to_response('modelos.html', {'lista': lista})

Albertocc

unread,
Sep 29, 2011, 10:11:39 AM9/29/11
to Django-es

La ruta de las imagenes es la que muestra

MEDIA_ROOT = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA\imagenes'

pero las imagenes estan dentro de una carpeta llamada media

podrias indicarme por donde tengo que ir para buscar informacion para
que se vean las imagenes

saludos

gracias

alberto

Javi

unread,
Sep 30, 2011, 7:05:42 AM9/30/11
to Django-es
Hola Alberto, te apunto varias cosas:

settings.py:
te falta asignarle un valor a MEDIA_URL, tradicionamente se usa '/
media/'
necesitas agregar los procesadores de contexto para que en tus
plantillas puedas acceder a {{ STATIC_URL }} y {{ MEDIA_URL }}, añade
algo como esto:
# Context Processors
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.media',
'django.core.context_processors.static',
... # lo que necesites
)

urls.py:
Habitualmente, mientras se desarrolla la aplicación se deja que el
propio servidor de Django sea el que sirva los archivos estáticos,
para ello en el urls.py de la raíz añade:
# al inicio
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf import settings

#después de tu urlpatterns = ...
if settings.DEBUG:
urlpatterns += staticfiles_urlpatterns()
urlpatterns += patterns('',
url(r'^%s/(?P<path>.*)$ % settings.MEDIA_URL',
'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
)

Luego, sobre la plantilla, según hayas definido el campo imagen del
modelo Figura necesitarás acceder a un atributo u otro. No suelo usar
mucho el campo ImageField de Django por defecto así que lo siguiente
puede no ser correcto, pero puedes probar a usar
{{ Figura.imagen.url }} o similar. Inspecciona en una shell los
atributos disponibles del campo imagen para tener más idea. Si no,
sigue preguntando que con seguridad alguien más de la lista te podrá
guiar con más claridad en este punto.

Un saludo,
Javi.

Albertocc

unread,
Sep 30, 2011, 11:45:52 AM9/30/11
to Django-es
Gracias javi

poniendo lo que me has dicho ahora mete la ruta media en la imagen
pero sigue sin mostrarla

como en el modelo tengo esto

imagen = models.ImageField(upload_to='imagenes')

la ruta de la imagen guardada es imagenes/nombreimagen.jpg

y en la plantilla esto

<A HREF={{ Figura.imagen.url }} >

la ruta que muestra es http://192.168.1.8:8000/media/imagenes/nombreimagen.jpg

pero sigue sin mostrarla



saludos

alberto

Javi

unread,
Oct 1, 2011, 7:58:17 AM10/1/11
to Django-es
¿Qué mensaje te da el servidor cuando intentas abrir
http://192.168.1.8:8000/media/imagenes/nombreimagen.jpg directamente?

Por otro lado, puede ser que si has configurado MEDIA_ROOT = 'C:
\Documents and Settings\Alberto\Mis documentos\HTML\Django-1.3.1\COEPA
\imagenes' esté buscando la imagen en el lugar equivocado. Ten en
cuenta que se espera que la imagen esté en 'C:\Documents and Settings
\Alberto\Mis documentos\HTML\Django-1.3.1\COEPA\imagenes\imagenes
\nombreimagen.jpg' ATENCIÓN a las 2 carpetas imagenes seguidas. Lo
ideal es que la carpeta que asignas a MEDIA_ROOT se llame también
'media' para evitar confusiones.

Échale un vistazo y me cuentas,
Javi.

Albertocc

unread,
Oct 3, 2011, 11:47:54 AM10/3/11
to Django-es
Hola javi, gracias por tu ayuda

mi fichero urls tiene esto

urlpatterns = patterns('',
# Examples:
# url(r'^$', 'COEPA.views.home', name='home'),
# url(r'^COEPA/', include('COEPA.foo.urls')),
(r'^Figuras/$', Figura),

el settings.py esto

MEDIA_ROOT = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA\imagenes'
MEDIA_URL = '/media'
STATIC_ROOT = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA'
STATIC_URL = '/static/'

al abrir esta url http://192.168.1.8:8000/Figuras

me muestra la tabla donde no sale la imagen


>>>>>>>>> ¿Qué mensaje te da el servidor cuando intentas abrirhttp://192.168.1.8:8000/media/imagenes/nombreimagen.jpgdirectamente?

la he escrito a mano
me da ruta no definida en el urls.py

esta es la ruta que me da al pinchar en la imagen

http://192.168.1.8:8000/Figuras/imagenes/pluto.jpg

el Figuras es por que esta en la url de antes y esto es el texto que
me da


Page not found (404)
Request Method: GET
Request URL: http://192.168.1.8:8000/Figuras/imagenes/pluto.jpg

Using the URLconf defined in COEPA.urls, Django tried these URL
patterns, in this order:

^Figuras/$
^admin/
^static\/(?P<path>.*)$
^%s/(?P<path>.*)$ % settings.MEDIA_URL

The current URL, Figuras/imagenes/pluto.jpg, didn't match any of
these.

You're seeing this error because you have DEBUG = True in your Django
settings file. Change that to False, and Django will display a
standard 404 page.

Albertocc

unread,
Oct 3, 2011, 11:54:01 AM10/3/11
to Django-es

> Por otro lado, puede ser que si has configurado MEDIA_ROOT = 'C:
> \Documents and Settings\Alberto\Mis documentos\HTML\Django-1.3.1\COEPA
> \imagenes' esté buscando la imagen en el lugar equivocado. Ten en
> cuenta que se espera que la imagen esté en 'C:\Documents and Settings
> \Alberto\Mis documentos\HTML\Django-1.3.1\COEPA\imagenes\imagenes
> \nombreimagen.jpg' ATENCIÓN a las 2 carpetas imagenes seguidas. Lo
> ideal es que la carpeta que asignas a MEDIA_ROOT se llame también
> 'media' para evitar confusiones.
>

respecto a la ruta he puesto la carpeta imagenes dentro de otra que se
llama imagenes y las imagenes dentro de las dos
en la carpeta COEPA y tambien dentro de la carpeta globos que es la de
la aplicación

pero a mi lo que me resulta extraño es que la ruta completa que me
pone cuando pincho en la imagen es la que habia

http://192.168.1.8:8000/Figuras

que es la que escribo yo para que lance la vista
(r'^Figuras/$', Figura),

def Figura(request):
lista = modelo.objects.all()
return render_to_response('modelos.html', {'lista': lista})

y luego añade el imagenes/nombreimagen.jpg

quedando asi

http://192.168.1.8:8000/Figuras/imagenes/pluto.jpg

y falla

¿por que me mete el Figuras en la ruta de la imagen?

gracias de nuevo por tu ayuda

saludos

alberto

Albertocc

unread,
Oct 3, 2011, 12:10:56 PM10/3/11
to Django-es

Javi, no se lo que he cambiado pero ahora si me quita el Figuras de la
ruta

y pone la ruta

http://192.168.1.8:8000/imagenes/pluto.jpg

he probado y sigue sin mostrarme las imagenes esto es lo que sale

Page not found (404)
Request Method: GET
Request URL: http://192.168.1.8:8000/imagenes/pluto.jpg

Using the URLconf defined in COEPA.urls, Django tried these URL
patterns, in this order:

^Figuras/$
^admin/
^static\/(?P<path>.*)$
^%s/(?P<path>.*)$ % settings.MEDIA_URL

The current URL, imagenes/pluto.jpg, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django
settings file. Change that to False, and Django will display a
standard 404 page.








tambien he probado a crear una carpeta static y las imagenes dentro de
la carpeta y tampoco me las muestras

alberto

Javi

unread,
Oct 4, 2011, 8:08:37 AM10/4/11
to Django-es
Hola de nuevo Alberto.

en tu archivo settings.py añadele la '/' final a:

MEDIA_URL = '/media'

para que quede como:

MEDIA_URL = '/media/'

Si en las plantillas intenta renderizar las imágenes sin la ruta /
media/imagenes/pluto.jpg fíjate en el "/media/" inicial, cambia tu
plantilla de algo como esto:

<img src="{{ Figura.imagen.url }}" alt="" />

a algo como esto:

<img src="{{ MEDIA_URL }}{{ Figura.imagen.url }}" alt="" />

Ten en cuenta que para usar la variable MEDIA_URL en las plantillas
debes haber añadido 'django.core.context_processors.media' a
TEMPLATE_CONTEXT_PROCESSORS como comentamos anteriormente.

Prueba y me cuentas, un saludo.

Albertocc

unread,
Oct 4, 2011, 10:30:49 AM10/4/11
to Django-es
Hola javi,

he hecho lo que me has dicho y sigue sin mostrarme las imagenes y al
pinchar en una imagen sale

http://192.168.1.8:8000/media/imagenes/pluto.jpg

pero esto es el error

Page not found (404)
Request Method: GET
Request URL: http://192.168.1.8:8000/media/imagenes/pluto.jpg

Using the URLconf defined in COEPA.urls, Django tried these URL
patterns, in this order:

^Figuras/$
^admin/
^static\/(?P<path>.*)$
^%s/(?P<path>.*)$ % settings.MEDIA_URL

The current URL, media/imagenes/pluto.jpg, didn't match any of these.

You're seeing this error because you have DEBUG = True in your Django
settings file. Change that to False, and Django will display a
standard 404 page.



gracias

alberto

Javi

unread,
Oct 4, 2011, 12:40:12 PM10/4/11
to Django-es
¿Te ocurre también si cambias en el archivo urls.py la línea

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

por

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

?

Albertocc

unread,
Oct 5, 2011, 11:57:49 AM10/5/11
to Django-es
Hola javi, no me ha funcionado

pero ya lo he solucionado

me pensaba y asi a sido que eran las rutas

he borrado la carpeta de las imagenes, despues he vuelto a poner
imagenes en los registros y he visto donde me creaba la carpeta pero
antes le he cambiado la ruta al modelo

imagen = models.ImageField(upload_to='static/')

he visto que me creaba la carpeta aqui

C:/Documents and Settings/Alberto/Mis documentos/HTML/Django-1.3.1/
COEPA/media/static

luego he dejado la plantilla asi

<A HREF={{ setting.MEDIA_URL }}{{ Figura.imagen.url }}>
<img src="{{ setting.MEDIA_URL }}{{ Figura.imagen.url }}"
width="100" height="100"></A>

y he ido cambiando el setting varias veces hasta que me ha funcionado,
comprobando la ruta que salia al pinchar en la imagen y

se quedo asi

MEDIA_ROOT = 'C:/Documents and Settings/Alberto/Mis documentos/HTML/
Django-1.3.1/COEPA'


MEDIA_URL = '../'


STATIC_ROOT = 'C:\Documents and Settings\Alberto\Mis documentos\HTML
\Django-1.3.1\COEPA\globos'


STATIC_URL = 'static/'

STATICFILES_DIRS = (

'C:/Documents and Settings/Alberto/Mis documentos/HTML/Django-1.3.1/
COEPA/media/static',
)

ademas de todos los cambios que me habias ido indicando

gracias de nuevo por molestarte en ayudarme

alberto

P.D. al cambiar eso las css de la admin no me las coje pero he creado
una carpeta en COEPA/admin/css con los css de django y los coje de ahi

Albertocc

unread,
Oct 5, 2011, 12:20:00 PM10/5/11
to Django-es

Hola, lo unico que me falla es que cuando visito http://192.168.1.8:8000/admin
desde mi ordenador graba las imagenes en

'C:/Documents and Settings/Alberto/Mis documentos/HTML/Django-1.3.1/
COEPA/media/static',

y si utilizo otro ordenador y visito la administracion http://192.168.1.8:8000/admin
lo guarda en

'C:/Documents and Settings/Alberto/Mis documentos/HTML/Django-1.3.1/
COEPA/static',

pero bueno como no es el servidor definitivo pues lo dejo

saludos

alberto

Albertocc

unread,
Oct 5, 2011, 12:45:57 PM10/5/11
to Django-es

corrijo no cambia con el ordenador sino con los usuarios

si me conecto como otro usuario que solo tiene derechos de modificar y
añadir registros a la tabla es cuando no lo guarda en el mismo sitio

y eso si que me parece un problema

saludos

alberto

Albertocc

unread,
Oct 5, 2011, 4:30:33 PM10/5/11
to Django-es


On 5 oct, 18:45, Albertocc <mariyalb...@gmail.com> wrote:
> corrijo no cambia con el ordenador sino con los usuarios
>

en windows en ubuntu no falla
mañana cogere la version de windows y la comparare con la de linux a
ver si es algo de la configuracion

saludos

alberto
Reply all
Reply to author
Forward
0 new messages