我有以下模型,其中包含我想在模板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="{{ item.pic1 }}">
未能找到。经过进一步调查,这是因为路径显示为我文件目录中的路径(例如/ home / user / apps / media / filename)而不是media_url(例如www.mysite.com/media/filename)。我检查了两个位置,实际上图像都是。
我的问题 - 如何在模板中访问www.mysite.com/media/filename表单的网址?我也试过了{{item.pic1.url}},但它仍然是我系统上的路径。
谢谢!
答案 0 :(得分:0)
如果您的图片上传路径可以通过静态路径访问,只需使用静态网址即可。 或者我认为你可以写一个网址,指向一个视图来返回图像响应。
例如:
# 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