在Django中显示图像

时间:2015-03-31 04:02:34

标签: django image imagefield

我有一个django应用程序,允许用户使用它提交图像。现在我的模型看起来像

class Posting(models.Model):
    title = models.CharField(max_length=150)
    images = models.ForeignKey(Image, null=True)

class Image(models.Model):
    img = models.ImageField(upload_to="photos/",null=True, blank=True)

我试图在我的模板中显示图像但是我似乎无法让它工作。我已经走了无数堆叠溢出的帖子,并且没有任何运气。在我的模板中我有

{ for post in postings }
    <img src"{{ post.image.url }} #and many variations of this

然而其他似乎显示网址。网址似乎总是空白。任何帮助将不胜感激!

5 个答案:

答案 0 :(得分:9)

这就是我如何运作的。

<强> settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
STATIC_URL = '/static/'

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)

MEDIA_ROOT = (
BASE_DIR
)


MEDIA_URL = '/media/'

<强> models.py ...

image = models.ImageField(upload_to='img')

<强> urls.py (项目)

if settings.DEBUG:
urlpatterns = urlpatterns + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

模板(。html)

<img src="{{ post.image.url }}" alt="img">

答案 1 :(得分:2)

做这样的事情。此代码正在我的应用程序中运行。

views.py:

def list(request):
  images = Image.objects.all()
  return render(request, "list.html", {'images': images})

list.html:

{% for i in images %}
    <img src="{{ i.image.url }}" width="500px"/>
{% endfor %}

答案 2 :(得分:1)

你应该期待类似的东西:

{% for post in postings %}
  <img src="{{ post.image.url }}">
{% endfor %}

这里有几点需要注意 -

  • 图像作为文件提供,无论为您的应用程序提供什么服务(runserver,nginx,apache等)都需要能够路由该文件。
  • 您必须确保构建要使用的模板引擎的上下文。它将无法在上下文中找不到的值上失败。

答案 3 :(得分:1)

模板标签应为:

<img src="{{ post.images.img.url }}" ... >

答案 4 :(得分:0)

您似乎正在尝试遵循Corey Schaefer的视频教程系列。如果是这样,我的建议将无济于事,但如果没有,Corey Schaefer的视频将准确地介绍您在 https://youtu.be/FdVuKt_iuSI?list=PL-osiE80TeTtoQCKZ03TU5fNfx2UY6U4p

您必须设置许多设置并覆盖一些默认设置。 django文档有两种实现方法,一种用于在localhost上开发,另一种用于生产:https://docs.djangoproject.com/en/2.2/howto/static-files/