2016-12-01 51 views
1
\project_structure 
-app 
\project 
    -settings.py 
    -... 
\picture 
    -panda.jpg 

我已經上傳圖片到pictureDjango圖片src沒有找到

class Goods(models.Model): 
    pic = models.ImageField(upload_to='picture') 

而且在database的數據是圖片/ panda.jpg

現在,我怎麼能顯示出它的HTML?

我在HTML寫的:

<p>{{each.pic}}</p> 
<img src='{{ each.pic.url }}' /> 

而且在瀏覽器的源代碼是這樣的:

picture/panda.jpg 
<img src='picture/panda.jpg' /> 

的圖像被掛http://localhost:8000/my_sell/picture/panda.jpg。而無法顯示。

我該如何解決這個問題,我試過在settings.py中加media_root而沒用。

+0

'MEDIA_ROOT'應該是大寫('MEDIA_ROOT')。通過改變它來檢查它是否工作。 – martinarroyo

+0

你能否提供你的網址文件 – marin

回答

2

沒有檢查這個,但幾乎所有的代碼都取自我的工作項目:)。

settings.py

MEDIA_URL = '/media/' 
MEDIA_ROOT = (
    os.path.join(BASE_DIR, 'media') 
) 

models

from django.core.files.storage import FileSystemStorage 
from django.conf import settings 


image_storage = FileSystemStorage(
    # Physical file location ROOT 
    location=u'{0}/my_sell/'.format(settings.MEDIA_ROOT), 
    # Url for file 
    base_url=u'{0}my_sell/'.format(settings.MEDIA_URL), 
) 


def image_directory_path(instance, filename): 
    # file will be uploaded to MEDIA_ROOT/my_sell/picture/<filename> 
    return u'picture/{0}'.format(, filename) 


class Goods(models.Model): 
    pic = models.ImageField(upload_to=image_directory_path, storage=image_storage) 

views

from django.shortcuts import render 

def view_picture(request): 
    c = dict() 
    c['goods'] = Goods.objects.all() 
    return render(request, 'template.html', c) 

templates

{% for product in goods %} 
    {% if product.pic %}  
     <img src="{{ product.pic.url }}"> 
    {% endif %} 
{% endfor %} 

編輯:不要忘了MEDIA_URL加入到根urls.py

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

嗨,我已經更新了我的密碼,圖片保存在**/project/media/my_sell/picture/panda.jpg **,但圖片仍然無法顯示。 :'' –

+0

更新我的回答,添加正確的urlpatterns :)。 – valex