2016-08-07 10 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間では持続しません。より永続的な場所にアップロードする必要があります。人気のある選択肢はAmazon S3です。それを実現するライブラリがたくさんあります。

+0

ダニエルに感謝しますが、まだdynoが実行されるまで画像が表示されるはずです –

+0

実際に/メディア/。静的資産を提供するために使用していると思われるWhiteNoiseは、デフォルトではSTATIC_URLでしか提供されません。 –

関連する問題