2017-06-15 30 views
0

我在Django中顯示用戶圖像時出現問題,它似乎主要工作。當用戶提交圖片時,它將 成功存儲在正確的文件夾中。但是我保存後無法顯示圖片。使用django無法從本地服務器檢索用戶圖像

Views.py:

def upload_pic(request): 
    user = User.objects.get(id=request.user.id) 
    form = ImageUploadForm(request.POST, request.FILES) 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 

    return render(request, 'tracker/upload_pic.html') 


def album(request): 
    user = User.objects.get(id=request.user.id) 
    if request.method == "POST": 
     user.extendedprofile.img = request.FILES['uploaded_image'] 
     user.extendedprofile.save() 
     #ExtendedProfile.objects.filter(pk=request.user.id).update(extendedprofile__img=request.FILES['uploaded_image']) 

    return render(request, 'tracker/album.html', {"user": user}) 

settings.py(相關部分)

STATIC_URL = '/static/' 
STATIC_ROOT = '/viraone/tracker/static' 

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

models.py

def user_directory_path(instance, filename): 
    return 'user_images/user_{0}/{1}'.format(instance.user.id, filename) 

class ExtendedProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    amount_spent = models.DecimalField(max_digits=6, decimal_places=2, default=0, blank=True) 
    img = models.ImageField(upload_to=user_directory_path) 

forms.py

class ImageUploadForm(forms.ModelForm): 
    #model to store the information about the pictures 
    class Meta: 
     model = ExtendedProfile 
     exclude =() 

urls.py

from django.conf.urls import url 
from . import views 
from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [url(r'^profile', views.profile, name='profile'), 
url(r'^login', views.login, name='login'), 
url(r'^export_info', views.export_info, name='export_info'), 
url(r'^product_page', views.product_page, name='product_page'), 
url(r'^(?P<object_id>[0-9]+)/$', views.product_details, name='product_details'), 
url(r'^upload_pic', views.upload_pic, name='upload_pic'), 
url(r'^album', views.album, name='album'), 
] 

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

模板:

{% load staticfiles %} 

<!DOCTYPE html> 
<html> 

<p> {{ user.extendedprofile.img }} </p> 
<img src="{{ user.extendedprofile.img.url }}" 
</html> 

Screenshot of errorScreenshot of error 2

我認爲這是一個問題與urls.py,在調試菜單它顯示404錯誤正確的文件路徑,但圖像並沒有出現。

+1

你可以檢查並確保settings.DEBUG是真的。因爲其他一切看起來都很好 – Colwin

+0

它被設置爲true,在調試菜單中,當我點擊錯誤消息時,它告訴我它無法找到的文件是「text/html」類型,如果該文件有任何內容,與它做。我也發佈了我的模板 – Amon

+1

您是否也可以發佈該錯誤? – Colwin

回答

2

改變這urls.py

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

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

,並在模板

<img src="{{ user.extendedprofile.img.url }}"> 
+0

嘿,對於遲到的回覆抱歉,這也不起作用。除非我錯誤地使用它,那麼在我使用django標籤之後顯示錯誤的目錄在我的圖像所在的子目錄之前顯示「MEDIA_URL」文件夾三次,如果有意義的話, – Amon

+0

文檔也會說使用{%加載靜態%},{%load get_media_prefix%}無法識別。讓我知道如果你需要更多的澄清 – Amon

+0

好,所以它現在正在工作,我刪除了'{%get_media_prefix%}',但保留了'{%load static%}',這似乎是做的伎倆 – Amon

相關問題