Question

So I have a project on webfaction where I need to create two different environments, one to server django and one to server static files.

So when I upload an image from admin panel I can see the image is placed in root i defined but with full path. When i return the image in my view i get my domain.com/full/media/root/path/imagename

this generates a broken link - when i go to mydomain.com/uploads/image_name, I can see image file is there however my link is pointing to full path rather than root_url,

Could you please help me with this? I really dont understand how i can correct this image link in my view

<img src="{{ MEDIA_URL }}{{ mymodel.my_image }}" alt="{{ name }}" width="150" height="200" />

I do understand there are so many subjects similar to this here however none of them could direct me correctly in regards to how to hide or change path root to "uploads"

I have which works fine in my admin

class Movie(models.Model):

name = models.CharField(max_length=50)


def get_file_path(instance, filename):
    ext = filename.split('.')[-1]
    filename = "%s.%s" % (uuid.uuid4(), ext)
    return os.path.join( '/home/user/webapps/project/uploads/' , filename)


my_image = models.ImageField(upload_to = get_file_path, null=True, blank=True)
def __unicode__(self):
    return self.name

In my settings:

MEDIA_ROOT = '/home/user/webapps/project/uploads/'
MEDIA_URL = '/uploads/'

and project url:

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

  from django.contrib import admin
  admin.autodiscover()

  urlpatterns = patterns('',      
    url(r'^admin/', include(admin.site.urls)),
  )


if settings.DEBUG:
urlpatterns += patterns('',
(r'^uploads/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))

Thank you all in advance

Was it helpful?

Solution

At first for your model you should create an image field and in there you should define where you want to upload your image:

class mymodel(models.Model):
    name = models.CharField(max_length=50)
    my_image = models.ImageField(blank=True, null=True,upload_to='/home/user/webapps/project/uploads/')

After that in your template when you want to show your image after getting your model object from your database try this:

<img src="{{ mymodel.my_image.url }}" alt="{{ mymodel.name }}" width="150" height="200" />

OTHER TIPS

You can use:

{{ mymodel.my_image.url }}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top