Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django object.image.url not displaying even though path is correct

Tags:

python

django

I have images I uploaded through django admin, but they are not displaying. The weird thing is that I have another project with the EXACT same code and it works. object.image.url outputs /media/media/image.jpg as does my other project. But this project does not show the image. if I put an image from my static folder or if I hardcode an image, it works fine. The problem is only when I try an image uploaded from the admin it does not work. Am I missing something in my settings.py file? or anywhere?

Models.py:

from django.db import models

# Create your models here.
class Connect(models.Model):
title = models.CharField(max_length=70)
short_description = models.TextField(null=True, blank=True)
description = models.TextField()
image = models.ImageField(upload_to='media', blank=True, null=True)

def __str__(self):
    return self.title

views.py:

def index(request):
about = About.objects.all()
staff = Staffmembers.objects.all()
ministries = Ministries.objects.all()
connect = Connect.objects.all()
context = {
    'template': 'home',
    'connect': connect,
    'about': about,
    'staff': staff,
    'ministries': ministries,
    }
return render(request,'home/index.html', context)

template(index.html):

<div class="connect-wrapper row">
        <h1 class="title connect-title">Connect</h1>
        {% for object in connect %}
    <div class="home-div connect-div col-md-4">
        <h4>{{ object.title }}</h4>
        <p>{{ object.short_description }}</p>
        {% if object.image %}
        <img class="connect-image-home" src="{{object.image.url}}" alt="connect">
        <p>{{object.image.url}}</p> //sanity check
        {% endif %}
    </div>
    {% endfor %}
</div>

settings.py:

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

urls.py:

from django.conf.urls import url, include
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('home.urls'), name="home"),
]
like image 392
Brando Avatar asked Feb 20 '17 01:02

Brando


1 Answers

I believe you need to add the media urls to your urls.py. Something like:

from django.conf import settings
from django.conf.urls import url
from django.conf.urls.static import static
from django.contrib import admin

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include('home.urls'), name="home"),
] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
like image 56
turbotux Avatar answered Oct 19 '22 17:10

turbotux