MEDIA_ROOT未附加到ImageField URL
这个模型是这样定义的:
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
实例,结果是这样的:
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'
所以,当我在位于www/core/templates
的模板中调用{{ p.img_sum.url }}
时,它找不到图片文件,因为相对网址应该是../media/product_images/test.jpg
,而不是/media/product_images/test.jpg
。
我该如何解决我的图片文件的正确网址呢?
2 个回答
0
所以问题并不是出在文件的位置上,而是因为Django在开发环境中默认不提供媒体文件的服务。这个问题帮助我们弄清楚了这一点。
0
试着在settings.py文件中把MEDIA_URL
设置为'../media/'
。