Django - Display ImageField
Asked Answered
H

3

26

I've just started to use Django and I haven't found a lot of info on how to display an imageField, so I made this:

models.py:

class Car(models.Model):
    name = models.CharField(max_length=255)
    price = models.DecimalField(max_digits=5, decimal_places=2)
    photo = models.ImageField(upload_to='site_media')

views.py:

def image(request):
    carx = Car()
    variables = RequestContext(request,{
        'carx':carx
    })
    return render_to_response('image.html',variables)

image.html:

{% extends "base.html" %}
{% block content %}
   <img src=carx />
{% endblock %}

I already save an image since terminal and I know is there, also if a do this in image.html:

{% block content %}
    {{ carx }}
{% endblock %}

The output is: Car object

Can anyone tell me where is my error?

Hyoscyamus answered 24/7, 2013 at 23:3 Comment(0)
D
49

An ImageField contains a url attribute, which you can use in your templates to render the proper HTML.

{% block content %}
    <img src="{{ carx.photo.url }}">
{% endblock %}
Detribalize answered 24/7, 2013 at 23:7 Comment(4)
Assuming there's a server configured to serve content from site_media, anyway.Monochasium
I have this in settings.py STATIC_URL ='/Users/gcarranza/PycharmProjects/django_bookmarks/site_media/' STATICFILES_DIRS = ( '/Users/gcarranza/PycharmProjects/django_bookmarks/site_media', )Hyoscyamus
It's more a question of having an actual web server configured - docs.djangoproject.com/en/dev/howto/static-files/… shows how you can serve them from Django in development, but that's not a good idea in a production environment.Monochasium
Not sure if this is a matter of version, but this approach of providing the variable alone in 'src' doesn't seem to work.Mercurous
P
4

You can also make use of the Static URL in Settings.py. Make a directory for example "Uploads", in the Static directory of your app. Also change this in your model in models.py.

Use the following code:

<img src="{% static carx.photo.url %}" />
Privity answered 13/12, 2016 at 21:8 Comment(1)
Although this would work, you should not upload user files into /static, but into a /media folder.Muraida
H
-2

Thanks to all, i fix it in this way.

views.py

def image(request):
carx = Car.objects.all()
for mycar in carx:
    MyCar = mycar.photo.url
variables = RequestContext(request,{
    'carx':MyCar
})
return render_to_response('image.html',variables)

image.html

{% extends "base.html" %}

{% block content %}
     <img src="{{ MEDIA_URL }}{{ carx }}"/>
{% endblock %}

settings.py

 MEDIA_URL = '/Users/gcarranza/PycharmProjects/django_bookmarks/'
 STATIC_URL = '/Users/gcarranza/PycharmProjects/django_bookmarks/site_media/'
 STATICFILES_DIRS = (
 '/Users/gcarranza/PycharmProjects/django_bookmarks/site_media',)

Now i know that carx.photo.url retrieve the absolute path of the file and its only matter to load as static file.

Hyoscyamus answered 25/7, 2013 at 8:48 Comment(2)
@unizeO please update your answer i already did but image not workingGlutamate
This is more compliated than it really needs to be.Lecythus

© 2022 - 2024 — McMap. All rights reserved.