2013-09-29 5 views
0

У меня проблема с обслуживанием загруженных пользователями файлов в моих шаблонах.Django, обслуживающий динамические файлы

Я установил:

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

и мои модели, как:

mainPhoto = models.ImageField(upload_to="articles/") 

Когда в моих шаблонах, я стараюсь:

<img src="{{MEDIA_URL}}{{article.mainPhoto}}" /> 

Изображение не отображается на веб-сайт.

Я нашел одно устаревшее решение с django .serve(), но я надеюсь избежать его использования.

Я искал везде и не нашел ответа, поэтому я надеюсь, что кто-то здесь сможет мне помочь.

+0

, что вы получили, если вы оставите MEDIA_ROOT =»" – drabo2005

+1

MEDIA_ROOT должен быть абсолютным. Абсолютные пути начинаются с косой черты. –

ответ

2

Для выполнения этой работы есть две части. Сначала конфигурация Django. Для этого есть две настройки, которые вы уже упоминали - MEDIA_URL и MEDIA_ROOT. Как уже отмечалось в комментариях, MEDIA_ROOT должен быть абсолютным путем. Например:

MEDIA_ROOT = `/abs/path/to/project/media/` 

Вторая часть фактически служит для файлов. Если вы находитесь в производстве, вы НИКОГДА не хотите обслуживать свои статические или мультимедийные файлы через Django, поэтому вам нужно настроить Apache или nginx или любую серверную систему, которую вы используете, чтобы обслуживать файлы вместо Django. Если вы, с другой стороны, все еще разрабатываете приложение, есть простой способ заставить Django обслуживать мультимедийные файлы. Идея заключается в том, чтобы изменить свой urls.py и использовать статический сервер файлов в Django, чтобы служить медиа-файлов, а также:

# urls.py 
from django.conf import settings 
from django.conf.urls.static import static 
urlpatterns = patterns('', 
    # other patterns 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

Подробнее об этом подходе в Django docs.

Также FYI, вы, вероятно, не должны использовать {{MEDIA_URL}}{{article.mainPhoto}}, чтобы получить URL-адрес изображения. Такой подход будет нарушен, например, если вы больше не будете использовать хранилище файловой системы для статических файлов и переключитесь на что-то другое, например Amazon S3. Это всегда хорошая идея для бэкенд хранения, чтобы выяснить URL:

<img src="{{article.mainPhoto.url}}" /> 
+2

Ладно, спасибо, я плохо настроил сервер nginx и ваш: {{article.mainPhoto.url}} решил еще одну проблему. Я жду того дня, когда буду лучше программировать джанго и помогу людям тоже ^^. – Edgarth

Смежные вопросы