У мене є така модель, що містить поле зображення, яке я хочу відобразити у своєму шаблоні 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