MEDIA_ROOT未附加到ImageField网址

时间:2014-07-09 22:37:17

标签: python django

模型定义如下:

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 }。

如何解析我的图片文件的好网址?

2 个答案:

答案 0 :(得分:0)

尝试将settings.py中的MEDIA_URL定义为'../media/'

答案 1 :(得分:0)

因此问题与文件位置无关,而是与Devang环境中默认不提供媒体文件的事实有关。 This问题有助于弄明白。