MEDIA_ROOT未附加到ImageField URL

1 投票
2 回答
680 浏览
提问于 2025-04-18 12:43

这个模型是这样定义的:

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/'

撰写回答