2017-01-11 10 views
0

У меня есть базовое приложение для изучения блога, в котором я столкнулся с проблемой: «сообщение в блоге» с изображением, загруженным через админ-форму приложения, отлично работает, пока я не нажму другую версию через герольку. Затем, когда на изображении отобразился сломанный значок img, и приложение не может найти изображение, даже если цель изображения, когда я смотрю на адрес изображения, будет такой же.Django + Heroku: Изображения работают до следующего Нажмите

Я чувствую, что мне не хватает чего-то принципиально важного в чем-то, поэтому почему я не могу это исправить Google. Кто-нибудь знает, почему я спотыкаюсь здесь, и я даже подхожу к этому правилу?

Я использую Django + Gunicorn + dj-static для обслуживания статических файлов.

Вот модель:

class Post(models.Model): 
    title = models.CharField(max_length=100) 
    content = models.TextField() 
    picture = models.ImageField(upload_to='blog/static/blog/images') 
    section = models.ForeignKey('Section') 
    posted = models.DateTimeField(auto_now_add=True) 
    posted_by = models.TextField() 
    tags = models.ManyToManyField('Tag') 
    def __str__(self): 
     return self.title 

вид:

def detail(request, post_id): 
    post = Post.objects.get(id=post_id) 
    picture = post.picture 
    context = {'post': post, 'picture': picture} 
    return render(request, 'blog/detail.html', context) 

надрез, содержащий HTML изображения:

<hr> 
    <img src="{{ picture.url }}"> 
<hr> 

settings.py дело со статическими файлами:

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

STATIC_ROOT = 'staticfiles' 
STATIC_URL = '/static/' 

BOOTSTRAP3 = {'include_jquery': True} 

LOGIN_URL = '/users/login' 

MEDIA_ROOT = 'media' 
MEDIA_URL = '/media/' 

#Herokusettings 
if os.getcwd() == '/app': 
    import dj_database_url 
    DATABASES = { 
     'default' : dj_database_url.config(default='postgres://localhost') 
    } 

    DEBUG = False 

    SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https') 

    ALLOWED_HOSTS = ['*'] 

    PROJECT_ROOT = os.path.dirname(os.path.abspath(__file__)) 

    # Static files (CSS, JavaScript, Images) 
    # https://docs.djangoprojectcom/en/1.9/howto/static-files/ 
    STATIC_ROOT = os.path.join(PROJECT_ROOT, 'staticfiles') 
    STATIC_URL = '/static/' 

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

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

и wsgi.py:

import os 

from django.core.wsgi import get_wsgi_application 
from dj_static import Cling, MediaCling 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "bss.settings") 
application = Cling(get_wsgi_application()) 
application = Cling(MediaCling(get_wsgi_application())) 

#application = get_wsgi_application() 

Спасибо за то, что этот взгляд, я чувствую, что я что-то фундаментальное о том, как все это работает без вести.

ответ

0

Место загрузки по умолчанию на Heroku находится во временном хранилище. Это связано с тем, что каждый раз, когда вы развертываете, вы будете получать другого веб-рабочего.

Для хранения файлов вам необходимо использовать S3 или другое место. К счастью, это хорошо документировано для Paperclip на Heroku.

+1

Спасибо! Я исследую это! – InspectorBean