来自 ImageField 的图像不会加载到模板中
Images from ImageField doesn't load in a template
我正在创建一个房地产代理网站。每个报价都有几张照片,其中一张照片在管理面板中标记为主要照片后,应该显示在索引页上,但不幸的是它没有。
我认为问题出在 views.py
或 index.html
中。 Settings.py
和 urls
似乎没问题,因为我可以通过在浏览器中输入图像的确切 url 来访问给定图像(例如 .../media/photos/name_of_the_image。 jpg) - 然后图像显示在浏览器中。
Models.py:
class Offer(models.Model):
category = models.ForeignKey(Category)
city = models.CharField(max_length=128)
district = models.CharField(max_length=128)
floor_space = models.IntegerField()
price = models.IntegerField()
def __unicode__(self):
return "Offer nb %s" % (self.id)
class OfferImage(models.Model):
offer = models.ForeignKey(Offer, related_name='images')
images = models.ImageField(upload_to='photos/', blank=True, null=True)
main_image = models.BooleanField(default=False)
Views.py:
def index(request):
category_list = Category.objects.all
latest_offers = Offer.objects.order_by('-pub_date')[:10]
context_dict = {
'categories': category_list,
'latest_offers': latest_offers,
}
return render(request, 'cardom/index.html', context_dict)
Urls.py:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('cardom.urls')),
]
if settings.DEBUG:
urlpatterns += patterns(
'django.views.static',
(r'^media/(?P<path>.*)',
'serve',
{'document_root': settings.MEDIA_ROOT}), )
if not settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Index.html:
<div class="col-md-6">
<table class="table">
{% for offer in latest_offers %}
<tr><th>{{offer.category}}</th></tr>
<tr><td><img src="{{ offer.images.url }}" height="120" width="200" alt="error"></td></tr>
<tr><td>{{offer.city}} {{offer.district}} {{offer.floor_space}} {{offer.price}} </td></tr>
{% endfor %}
</table><br />
</div>
问题出在哪里?
当你写:
{{ offer.images.url }}
你得到的是一个空字符串,因为 offer.images
是一个 RelatedManager
,它没有 url 属性。
您应该使用专用管理器或视图中的其他查询来检索相应的图像:
main_images = offer.images.filter(main=True)
try:
image = main_images[0]
except:
image = None # Or whatever you want
您也可以通过向您的报价模型添加一个额外的属性 main_image 来避免这种情况(但您必须为管理员编写相应的逻辑)。
我正在创建一个房地产代理网站。每个报价都有几张照片,其中一张照片在管理面板中标记为主要照片后,应该显示在索引页上,但不幸的是它没有。
我认为问题出在 views.py
或 index.html
中。 Settings.py
和 urls
似乎没问题,因为我可以通过在浏览器中输入图像的确切 url 来访问给定图像(例如 .../media/photos/name_of_the_image。 jpg) - 然后图像显示在浏览器中。
Models.py:
class Offer(models.Model):
category = models.ForeignKey(Category)
city = models.CharField(max_length=128)
district = models.CharField(max_length=128)
floor_space = models.IntegerField()
price = models.IntegerField()
def __unicode__(self):
return "Offer nb %s" % (self.id)
class OfferImage(models.Model):
offer = models.ForeignKey(Offer, related_name='images')
images = models.ImageField(upload_to='photos/', blank=True, null=True)
main_image = models.BooleanField(default=False)
Views.py:
def index(request):
category_list = Category.objects.all
latest_offers = Offer.objects.order_by('-pub_date')[:10]
context_dict = {
'categories': category_list,
'latest_offers': latest_offers,
}
return render(request, 'cardom/index.html', context_dict)
Urls.py:
urlpatterns = [
url(r'^admin/', include(admin.site.urls)),
url(r'', include('cardom.urls')),
]
if settings.DEBUG:
urlpatterns += patterns(
'django.views.static',
(r'^media/(?P<path>.*)',
'serve',
{'document_root': settings.MEDIA_ROOT}), )
if not settings.DEBUG:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
Index.html:
<div class="col-md-6">
<table class="table">
{% for offer in latest_offers %}
<tr><th>{{offer.category}}</th></tr>
<tr><td><img src="{{ offer.images.url }}" height="120" width="200" alt="error"></td></tr>
<tr><td>{{offer.city}} {{offer.district}} {{offer.floor_space}} {{offer.price}} </td></tr>
{% endfor %}
</table><br />
</div>
问题出在哪里?
当你写:
{{ offer.images.url }}
你得到的是一个空字符串,因为 offer.images
是一个 RelatedManager
,它没有 url 属性。
您应该使用专用管理器或视图中的其他查询来检索相应的图像:
main_images = offer.images.filter(main=True)
try:
image = main_images[0]
except:
image = None # Or whatever you want
您也可以通过向您的报价模型添加一个额外的属性 main_image 来避免这种情况(但您必须为管理员编写相应的逻辑)。