Django模型服务媒体文件

问题描述 投票:1回答:2

我有两个模型:PackagesImagesImagesPackages有多对一的关系。 Images表有一个外键package_id。我必须显示countrypricePackages属性以及与包相关的一个图像。可能有许多图像与单个包相关,但是,我必须只选择一个。

该表看起来像:

Packages

  • ID
  • 国家
  • 价钱

Images

  • ID
  • 网址
  • 的package_id

我的代码如下:

views.朋友

def index(request):
    featured = Package.objects.filter(featured=True).order_by('-pub_date')[:4]
    featured_packages = []
    for item in featured:
    image = item.packageimages_set.all()[1]
    data = {'package': item, 'image': image}
    featured_packages.append(data)
    context = {'featured': featured_packages}
    return render(request, 'tours/index.html', context)

的index.html

{% for item in featured %}
<p>Country: {{item.package.country}}</p>
<p>Price: {{item.package.price}}</p>
<p>Image: <img src="{{item.image.url}}"></p>
{% endfor %} 

一切似乎都很好我得到了URL。但是,我没有得到输出。输出如下所示:

我的错误在哪里?我无法显示图像。还有什么比这更有效率来完成上述任务了吗?

django django-models django-templates django-views
2个回答
0
投票

我试过这段代码:

featured_packages.append(data)

AttributeError:'dict'对象没有属性'data'


0
投票

我实际上尝试了不同的东西,最终找到了这个解决方案。 Views.py:

def index(request):
    packages = Package.objects.filter(featured=True).order_by('-pub_date')[:4]
    featured_packages = []
    for package in packages:
        image = package.packageimages_set.all()[1]
        data = {'package': package, 'image': image}
        featured_packages.append(data)
    return render(request, 'tours/index.html', {'featured_packages': featured_packages})

对Index.html稍作修改:

{% load static %}
{% load thumbnail %}


{% for item in featured_packages %}
{% thumbnail item.image.url "1170x480" crop="center" as im %}
<img src="{{im.url}}" width="{{im.width}}" height="{{im.height}}" alt>
{% endthumbnail%}
{% endfor %}

我不知道如何,但这实际上解决了我的问题。这是Screenshot。我得到一些加密的文件名,图片实际上正在加载。它是缩略图吗?我正在使用sorl.thumbnail或者我认为“加载静态”没有任何效果,因为我试图在没有它的情况下加载文件。它工作得很好。

© www.soinside.com 2019 - 2024. All rights reserved.