模型定义如下:
class Product(models.Model):
title = models.CharField(max_length=50)
summary = models.CharField(max_length=200)
def upload_path(self, filename):
return "product_images/" + self.title.lower().replace(" ", "_") + path.splitext(filename)[1]
img_sum = models.ImageField(upload_to=upload_path)
视图很简单:
class HomeView(generic.ListView):
context_object_name = 'products_list'
template_name = 'core/home.html'
model = Product
模板尝试显示图像:
{% for p in products_list %}
<a href="#">
<article class="product_frame">
<img src="{{ p.img_sum.url }}" />
<h3>{{ p.title }}</h3>
<p>{{ p.summary }}</p>
</article>
</a>
{% endfor %}
MEDIA_ROOT明确设置为
MEDIA_ROOT = '/home/me/workspace/website/www/core/media/'
但是,似乎MEDIA_ROOT
永远不会附加到模型中定义的路径。作为一个完整性检查,这是我通过django管理界面提供的测试Product
实例从shell获得的内容:
In [20]: p = Product.objects.all()[3]
In [21]: p
Out[21]: <Product: Title : Test -- This is a test>
In [22]: p.img_sum
Out[22]: <ImageFieldFile: product_images/test.jpg>
In [23]: p.img_sum.url
Out[23]: '/media/product_images/test.jpg'
因此,当我在位于{{ p.img_sum.url }}
下的模板中调用www/core/templates
时,它将找不到图像文件,因为相对网址应为../media/product_images/test.jpg
而不是/media/product_images/test.jpg
}。
如何解析我的图片文件的好网址?
答案 0 :(得分:0)
尝试将settings.py中的MEDIA_URL
定义为'../media/'
。
答案 1 :(得分:0)
因此问题与文件位置无关,而是与Devang环境中默认不提供媒体文件的事实有关。 This问题有助于弄明白。