2016-08-07 121 views
0

我已經嘗試了一切,但不知何故,我無法看到用戶上傳的圖像。我在heroku上部署了代碼,每個靜態文件都正確加載。用戶甚至會糾正圖像的路徑,但不知何故服務器顯示沒有找到圖像的錯誤。Django沒有提供用戶在heroku上傳的媒體文件

Settings.py 
# Static files (CSS, JavaScript, Images) 
# https://docs.djangoproject.com/en/1.8/howto/static-files/ 

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles') 
STATIC_URL = '/static/' 

# Extra places for collectstatic to find static files. 
#STATICFILES_DIRS = (
# os.path.join(PROJECT_ROOT, 'static'), 
#) 

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'), 
) 

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

Models.py 
#this is for photos upload by user 
class You(models.Model): 
    user = models.ForeignKey(User,null=True) 
    name=models.CharField(max_length=30,blank=True,default='pictures/videos') 
    docfile = models.FileField(upload_to='documents/%Y/%m/%d', null=True,blank=True) 

    def __unicode__(self): 
     return self.user.username 

#Views.py(To upload files) 
@login_required 
def upload(request): 

    if request.method == 'POST': 

     newdoc = You(docfile = request.FILES['file'],user=request.user) 
     newdoc.save() 
     msg='dee' 
      # Redirect to the document list after POST 
     return HttpResponse(json.dumps({'message': msg})) 

    else: 
     form = DocumentForm() 



    # Render list page with the documents and the form 
    return render(request,'mat_upload.html',{'form':form}) 

Template(gallery.html) 
{% for document in documents %} 
<img class="img-responsive" src="{{MEDIA_URL}}/media/{{ document.docfile }}" alt="hiiii" style="max-width: 100%; 
    height: 250px;" /> 
{% endfor %} 

@login_required 
def gallery(request): 
    documents = You.objects.filter(user=request.user) 

    return render(request,'gallery.html',{'documents': documents,}) 
Urls.py 
from django.conf.urls import include, url 

from django.contrib import admin 

from django.conf import settings 
from django.conf.urls.static import static 
from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
from django.views.generic import RedirectView 
admin.autodiscover() 

import harpoons.views 


urlpatterns = [ 

    url(r'^admin/', include(admin.site.urls)), 
    url(r'^', include('harp.urls')), 
    url(r'^password_reset_recover/', include('password_reset.urls')), 
    url(r'^accounts/', include('allauth.urls')), 




] 
+0

你做了python manage.py collectstatic嗎? – alejosocorro

+0

@alejosocorro是的,我確實collectstatic。問題是用戶上傳的媒體文件。他們正在上傳,但當我打開它們時,django發生錯誤,即使位置看起來正確 –

回答

7

您無法在Heroku上本地保存用戶上傳的文件。文件系統是短暫的,並且不會在dyno重新啓動或併發dynos之間持續存在。你需要把它們上傳到更永久的地方;一個流行的選擇是亞馬遜S3,並且有很多圖書館可以爲你做到這一點。

+0

感謝Daniel,但我仍然應該看到圖像,直到dyno運行 –

+0

只有當您實際配置了某些服務/媒體/。 WhiteNoise大概用於提供靜態資產,默認情況下僅在STATIC_URL中提供服務。 –