/ / Django - доступ до URL-адреси imageField, який відповідає media_url, а не media_root - django, django-models, django-templates

Django - доступ до URL-адреси imageField, що відповідає media_url not media_root - django, django-моделі, django-шаблони

У мене є така модель, що містить поле зображення, яке я хочу відобразити у своєму шаблоні show_item.html.

Models.py

class Item(models.Model):
def get_file(self, filename):
url = "%s/%s" % (settings.MEDIA_ROOT, filename)
return url

seller = models.ForeignKey(settings.AUTH_USER_MODEL)
pic1 = ImageField(blank=True, upload_to=get_file, max_length=500)

Я знаю, що MEDIA_ROOT та MEDIA_URL правильно налаштовані.

Проблема в тому, що в моєму шаблоні я намагаюся отримати доступ

 <img src="/images/{{ item.pic1 }}">

який не вдається знайти.При подальшому дослідженні це відбувається тому, що шлях відображається як той, що міститься в моєму каталозі файлів (наприклад, / home / user / apps / media / filename), а не як media_url (наприклад, www.mysite.com/media/filename). Я перевірив обидва місця, і зображення насправді є в обох.

Моє запитання - як отримати доступ до URL-адреси форми www.mysite.com/media/filename у шаблоні? Я також спробував {{item.pic1.url}}, але це все ще шлях у моїй системі.

Дякую!

Відповіді:

0 для відповіді № 1

Якщо шлях до завантаженого вами зображення можна отримати за допомогою статичного шляху, просто використовуйте статичну URL-адресу. Або я думаю, що ви можете написати URL-адресу, вказуючи на вигляд, щоб повернути відповідь зображення.

Наприклад:

# in your urls.py
urlpatterns = patterns("",
url(r"^image/(?P<pk>d+)/$", "image_view", name="image_view"),
)

а потім відповісти на вміст зображення у поданні зображень.

from django.core.servers.basehttp import FileWrapper
from django.http import StreamingHttpResponse

def image_view(request, pk):
item = Item.objects.get(pk=pk)
filename = item.pic1.url
wrapper = FileWrapper(open(filename, "rb"))
response = StreamingHttpResponse(wrapper)
response["Content-Length"] = os.path.getsize(filename)
response["Content-Disposition"] = "attachment; filename=image.jpg"
return response