Ihor
Ihor

Reputation: 117

How to show model images in Django?

I have such models.py file

class Product(models.Model):
    CATEGORIES = {
        ('Computer', 'Комп\'ютер'),
        ('Smartphone', 'Смартфон')
    }
    photo = models.ImageField(upload_to='images/', blank=True)
    title = models.CharField(max_length=128, blank=False)
    description = models.CharField(max_length=5000, blank=False)
    price = models.PositiveIntegerField(blank=False)
    category = models.CharField(max_length=30, choices=CATEGORIES)
    count = models.PositiveIntegerField(blank=False)

In settings.py i DON'T have media variables/dirs

Also i try to show images in such way

{% extends 'base.html' %}

{% block title %}Каталог{% endblock %}

   {% block content %}
     {% for i in products %}
      <img src="{ static i.photo.url }">
      {{i.title}}
     {% endfor %}
    {% endblock %}

Result: enter image description here

I add my model objects in Django Admin

enter image description here

Upvotes: 0

Views: 328

Answers (4)

Kiran
Kiran

Reputation: 579

please see below configuration, have you done?

urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # urls/path
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

settings.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

your HTML file

    {% if i.photo %}
    <img src="{{ i.photo.url }}"> 
     {% endif %}

Upvotes: 1

Ankit Tiwari
Ankit Tiwari

Reputation: 4690

In settings.py i DON'T have media variables/dirs

you have to set MEDIA_ROOT and MEDIA_URL in settings.py and set the URL of each in urls.py because by default, Django stores files locally, using the MEDIA_ROOT and MEDIA_URL settings. The examples below assume that you’re using these defaults. check the official doc.

step - 1 configure media and static files like this

add this in your settings.py

STATIC_ROOT = BASE_DIR / 'static_cdn'
STATIC_URL = '/static/'

MEDIA_ROOT = BASE_DIR / 'media'
MEDIA_URL = '/media/'

STATICFILES_DIRS = [
   BASE_DIR / "static",
]

and add this in your urls.py

from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    # ... the rest of your URLconf goes here ...
] 

if settings.DEBUG:
  urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
  urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

Upvotes: 0

Surya Bista
Surya Bista

Reputation: 564

You can add like this. and run the collectstatic command to

 <img src="{%  static '/logo.png' %}"/>

 python manage.py collectstatic

Upvotes: 0

lucutzu33
lucutzu33

Reputation: 3700

You don't need the static tag.

<img src="{{ i.photo.url }}">

Upvotes: 0

Related Questions