2015-07-19 51 views
0

我正在創建一個房地產代理網站。每個優惠都有幾張照片,其中一張照片在管理面板中標記爲主照片後應顯示在索引頁面上,但不幸的是它不是。來自ImageField的圖片不會加載到模板中

我認爲問題是在views.pyindex.htmlSettings.pyurls似乎很好,因爲我可以通過在瀏覽器中輸入圖像的確切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> 

問題在哪裏?

回答

1

當你寫:

{{ offer.images.url }} 

你得到的是一個空字符串爲offer.imagesRelatedManager,它不會有一個url屬性。

您應該獲取相應的圖像或者使用一個專用的管理器或在您的視圖另一個查詢:

main_images = offer.images.filter(main=True) 
try: 
    image = main_images[0] 
except: 
    image = None # Or whatever you want 

您也可以避開這額外的屬性main_image添加到您的發售模式(但你將有爲admin寫入相應的邏輯)。

+0

我添加了main_image,這是一個簡單的方法,使其工作,謝謝 – dominik791