【问题标题】:Django Model serving Media Files服务媒体文件的 Django 模型
【发布时间】:2017-12-31 11:25:20
【问题描述】:

我有两个模型:PackagesImagesImagesPackages 具有多对一的关系。 Images 表有一个外键 package_id。我必须显示Packages 的属性countryprice,并带有一张与包裹相关的图像。一个包可以有很多张图片,但是我只能选择一个。

表格如下:

Packages:

  • 身份证
  • 国家
  • 价格

Images:

  • 身份证
  • 网址
  • package_id

我的代码如下:

Views.py

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)

索引.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。但是,我没有得到输出。输出如下所示:

我的错误在哪里?我无法显示图像。有没有什么更有效的方法来完成上述任务?

【问题讨论】:

  • 好像是目录路径错误。您是否在 settings.py 中设置了静态和/或媒体文件目录?这是 Django 的文档stackoverflow.com/questions/29360395/display-images-in-django
  • 您的 MEDIA_URL 设置是什么?为了在该 URL 上实际提供图像,您做了什么?
  • STATIC_URL = '/static/' MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 这就是我所拥有的。每件事似乎都在另一个页面上工作,我有一些不同的方法来获取内容。但是,它似乎不适用于此页面。 @丹尼尔罗斯曼
  • 是的!我已经设置了所有需要的东西。在另一个页面中一切正常。我显示图像。但我无法在此页面中显示。 @马格努斯

标签: django django-models django-templates django-views


【解决方案1】:

我试过这段代码:

featured_packages.append(data)

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

【讨论】:

    【解决方案2】:

    我实际上尝试了不同的方法,最终找到了这个解决方案。 视图.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 或者我认为“加载静态”没有任何效果,因为我试图在没有它的情况下加载文件。而且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-07
      • 2017-03-12
      • 2016-04-15
      • 2016-04-04
      • 2022-01-04
      • 2021-10-20
      • 2018-02-20
      • 2013-05-15
      相关资源
      最近更新 更多