在 Django 中显示图像
Display images in Django
我有一个 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
然而其他似乎显示 url。 url 似乎总是空白。任何帮助将不胜感激!
你应该期待类似的东西:
{% for post in postings %}
<img src="{{ post.image.url }}">
{% endfor %}
这里有几个注意事项 --
- 图像以文件的形式提供,无论为您的应用程序提供服务(runserver、nginx、apache 等)都需要能够路由该文件。
- 您必须确保正在构建供模板引擎使用的上下文。它会在上下文中找不到的值上默默地失败。
模板标签应该是:
<img src="{{ post.images.img.url }}" ... >
做这样的事情。此代码在我的应用程序中有效。
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 %}
我就是这样工作的。
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">
您似乎正在尝试学习 Corey Schaefer 的视频教程系列。如果是这样,我的建议将无济于事,但如果不是,Corey Schaefer 有一个视频,其中涵盖了您正在尝试做的事情
https://youtu.be/FdVuKt_iuSI?list=PL-osiE80TeTtoQCKZ03TU5fNfx2UY6U4p。
您必须设置相当多的设置并覆盖一些默认值。 django 文档有两种实现方式,一种用于在本地主机上开发,另一种用于生产:https://docs.djangoproject.com/en/2.2/howto/static-files/
我有一个 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
然而其他似乎显示 url。 url 似乎总是空白。任何帮助将不胜感激!
你应该期待类似的东西:
{% for post in postings %}
<img src="{{ post.image.url }}">
{% endfor %}
这里有几个注意事项 --
- 图像以文件的形式提供,无论为您的应用程序提供服务(runserver、nginx、apache 等)都需要能够路由该文件。
- 您必须确保正在构建供模板引擎使用的上下文。它会在上下文中找不到的值上默默地失败。
模板标签应该是:
<img src="{{ post.images.img.url }}" ... >
做这样的事情。此代码在我的应用程序中有效。
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 %}
我就是这样工作的。
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">
您似乎正在尝试学习 Corey Schaefer 的视频教程系列。如果是这样,我的建议将无济于事,但如果不是,Corey Schaefer 有一个视频,其中涵盖了您正在尝试做的事情 https://youtu.be/FdVuKt_iuSI?list=PL-osiE80TeTtoQCKZ03TU5fNfx2UY6U4p。
您必须设置相当多的设置并覆盖一些默认值。 django 文档有两种实现方式,一种用于在本地主机上开发,另一种用于生产:https://docs.djangoproject.com/en/2.2/howto/static-files/