Вопрос

Я установил Джанго приложение, использующее изображения.Я думаю, что правильно настроил параметры мультимедиа MEDIA_ROOT и MEDIA_URL.Однако изображения не отображаются.Знаете, в чем может быть проблема?

Рассмотрим этот пример:

Файлы изображений находятся под /home/www/media/app/photos и мы пытаемся запросить http://example.com/photos/123.jpg

Стоит ли мне использовать эти настройки?

MEDIA\_ROOT = /home/www/media

MEDIA_URL = http://example.com/app

ОБНОВЛЯТЬ: Забыл упомянуть, что я использую встроенный сервер разработки.

Это было полезно?

Решение

Обслуживание статического контента из Django обескураженный от самого разработчика (если не ошибаюсь, работает только в режиме отладки).Вместо этого вам следует использовать выделенный веб-сервер.

В любом случае, если вам действительно нужно это сделать, прочтите документацию на как обслуживать статические файлы.

Другие советы

ТОЛЬКО ДЛЯ РАЗРАБОТКИ

Вы можете настроить статический медиа-сервер для использования с их сервером разработки, сделав это в своем urls.py файл.Я приложил код, показывающий, как я его использую (вместе с принудительными условиями DEBUG).

from django.conf import settings
from django.conf.urls.defaults import *      

# Uncomment the next two lines to enable the admin:
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('', 
    (r'^$', 'views.index'),            

    # Accounts
    (r'^accounts/login/$', 'views.user_login'),
    (r'^accounts/logout/$', 'views.user_logout'),

    # Contrib Modules
    (r'^admin/(.*)', admin.site.root),
)

if settings.DEBUG :
    urlpatterns += patterns('',
        (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
    )

я кладу свой MEDIA_ROOT в подкаталоге html/media и ссылку на него как таковую в settings.py

MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')

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

Это правильный способ отображения файлов изображений с помощью ImageField.Представьте, что у нас есть изображение профиля пользователя:

модели.py:

UserProfile:
    profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)

настройки.py:

MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'

URL.py:

urlpatterns = [
.
.
.
]+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

PATH_TO_UPLOAD — это путь, по которому идут данные загрузки пользователя.Это подкаталог FULL_PATH_OF_MEDIA, что означает, что загруженный файл будет иметь

FULL_PATH_OF_MEDIA/PATH_TO_UPLOAD 

полный путь. Теперь этот контент доступен по этому URL:

SITE_NAME/URL_OF_MEDIA/PATH_TO_UPLOAD

Я также рекомендую прочитать это на static_files против media_files

док

Я подозреваю, что вы получаете страницу Django 404.Попробуйте напрямую получить доступ к одному из ваших изображений и посмотрите, происходит ли это.

Если да, то вам необходимо настроить веб-сервер для нет отправлять запросы внутри вашей медиа-иерархии в Django, но вместо этого обслуживать их напрямую.Вот фрагмент моего файла конфигурации Apache.В первом разделе Apache сообщает, что нужно отправить все в Django.Во втором разделе есть «SetHandler None», который говорит «обрабатывать вещи в /media обычным способом».

Видеть http://docs.djangoproject.com/en/dev/howto/deployment/modpython/ обо всех интересных подробностях.

Частичный файл httpd.conf для PrinceOfPinot.com (AKA pop):

<Location "/">
    SetHandler python-program
    PythonAutoReload Off
    PythonDebug Off
    PythonPath "['/var/www/production/pop', '/usr/local/lib/python2.5/site-packages/django'] + sys.path"
    SetEnv DJANGO_SETTINGS_MODULE settings
    PythonHandler django.core.handlers.modpython
</Location>

<Location "/media">
    SetHandler None
    AddOutputFilterByType DEFLATE text/html text/css application/x-javascript
</Location>

Я знаю, что исходный вопрос касается сервера разработки, но для всех, кто ищет ответ на производственную среду:

https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/ предоставляет руководство о том, как использовать файлы django в производственной среде.Судя по тону руководства, это подразумевает, что лучше иметь отдельный веб-сервер для обработки файлов или использовать mod_wsgi с Apache.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top