Django模板 - 来自media_root的图片在主页中呈现,但不是其他页面

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django模板 - 来自media_root的图片在主页中呈现,但不是其他页面相关的知识,希望对你有一定的参考价值。

我有一个在我的主页上呈现的图像,但它不在使用相同代码的不同页面上。我想问题可能是我的网址路径可能不同?这是我能找到的唯一区别。当我检查每个元素时,这就是我所看到的:

工作形象:/event/image.png

破碎的图像:/event/media/image.png

我在我的模板中渲染这样的图像:

        <img src="media/{{event.image}}" class="img-responsive" />

我的模型只是一个模型。图像字段,这里是我对破碎图像页面的视图:

def event(request, product_id):
    event = get_object_or_404(Event, id=product_id)

    image = event.image
    context = {'event':event, 'image':image}
    template = 'tourney.html'
    return render(request, template, context)

在我的终端,它说没有找到图像。那么如何更改我的设置,以便无论我在哪条路径,它都会在正确的目录中查找?这是我的媒体设置:

if DEBUG:
    MEDIA_URL = '/media/'
    STATIC_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static', 'static-only')
    MEDIA_ROOT = os.path.join(os.path.dirname(BASE_DIR), 'static', 'media')
    STATICFILES_DIRS = (
        os.path.join(os.path.dirname(BASE_DIR), 'static', 'static'),
    )
答案

你需要一个领先的斜杠:“/ media / ...”。

但是,更好的方法是使用内置属性,为您提供包含MEDIA_URL的完整URL:

<img src="{{ event.image.url }}" class="img-responsive">
另一答案

不要像media/{{event.image}}那样自己构建网址,让Django为你做这个工作:

    <img src="{{ event.image.url }}" class="img-responsive" />

这样,Django将使用您设置中的MEDIA_URL创建正确的URL。请注意,您的Web服务器配置必须与MEDIA_ROOT上的MEDIA_URL相匹配并提供图像

以上是关于Django模板 - 来自media_root的图片在主页中呈现,但不是其他页面的主要内容,如果未能解决你的问题,请参考以下文章

在 django settings.py 中更新 media_root 时遇到问题

在 Django 开发期间提供静态媒体:为啥不 MEDIA_ROOT?

django 在模板中使用 MEDIA URL

Django - MEDIA_ROOT 和 MEDIA_URL

Django MEDIA_URL 和 MEDIA_ROOT

Django MEDIA_URL 附加完整的 MEDIA_ROOT