【问题标题】:Django displaying images from media file instead of databaseDjango从媒体文件而不是数据库显示图像
【发布时间】:2021-03-28 09:03:24
【问题描述】:

如何显示来自媒体文件而不是数据库的图像?具体来说,我希望它加载用户从media_cdn 上传的图像。我觉得只有 views.py 需要更改,但我不确定其他区域是否也应该更改。

这是我的 Django 代码

settings.py

STATIC_URL = '/static/'
STATICFILES_DIRS =[os.path.join(BASE_DIR,"static")]
MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR,'media_cdn')

views.py

def imgdownload(request):
    allimages = ImagefieldModel.objects.all()
    return render(request, 'main/show.html',{'images': allimages})

urls.py

urlpatterns = [
    ....
    ....
    path("show/", views.imgdownload, name="imgdownload"),
    .... ]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

models.py

class ImagefieldModel(models.Model): 
    title = models.CharField(max_length = 200) 
    img = models.ImageField(upload_to = "media")

    class Meta:
        db_table = "imageupload"

show.html

{% extends "main/header.html" %}

{% load static %}
 

 {% block content %}
      <head>
        <title>Django Display Images</title>
      </head>
      <body>
          <div class="container">
          <table class="table table-striped">
              <thead>
                <tr>
                  <th>Title</th>
                  <th>Image</th>
                </tr>
              </thead>
              <tbody>
              {% for img in images %}  
                <tr>
                  <td>{{img.title}}</td>
                  <td><img src="/{{ BASIC_DIR }}/{{img.img}}" width="120"/></td>
                </tr>
                {% endfor %} 
              </tbody>
          </table>  
          </div>
      </body>
 {% endblock %}

非常感谢任何帮助。

【问题讨论】:

标签: python django


【解决方案1】:

在您的示例中,您可以使用“url”:{{ ìmg.img.url }} 进行更改:

<td><img src="{{ img.img.url }}" width="120"/></td>

所有将存储在数据库中的都是文件的路径(相对于 MEDIA_ROOT)。您很可能希望使用 Django 提供的便捷 url 属性。例如,如果您的 ImageField 名为 mug_shot,您可以使用 {{ object.mug_shot.url }} 在模板中获取图像的绝对路径。

Django documentation

【讨论】:

  • 好的,很快就会试用。将在结果 tmr 上回复您
  • 不,没有用。也许更改应该在 view.py 中,因为“ImagefieldModel.objects.all()”正在从数据库中获取文件路径
  • &lt;td&gt;&lt;img src="/{{ BASIC_DIR }}/{{img.img}}" width="120"/&gt;&lt;/td&gt; 更改为此 &lt;td&gt;&lt;img src="{{ img.img.url }}" width="120"/&gt;&lt;/td&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-11
  • 2015-05-07
  • 2021-10-12
  • 2017-10-15
  • 2017-07-08
  • 1970-01-01
  • 2012-06-02
相关资源
最近更新 更多