Django는 미디어 파일을 어떻게 제공합니까?
문제
나는 a를 설정했다 장고 이미지를 사용하는 응용 프로그램. 미디어 설정 Media_Root 및 Media_URL을 올바르게 설정했다고 생각합니다. 그러나 이미지가 나타나지 않습니다. 문제가 무엇인지 아십니까?
이 예를 고려해 보자 :
이미지 파일이 아래에 있습니다 /홈/www/미디어/앱/사진 그리고 우리는 요청하려고합니다 http://example.com/photos/123.jpg
이 설정을 사용해야합니까?
MEDIA\_ROOT = /home/www/media
MEDIA_URL = http://example.com/app
업데이트: 내장 개발 서버를 사용하고 있다고 언급하는 것을 잊었습니다.
해결책
Django의 정적 콘텐츠를 제공합니다 낙담 개발자 자체로부터 (내가 틀리지 않은 경우 디버그 모드에있을 때만 작동합니다). 대신 전용 웹 서버를 사용해야합니다.
어쨌든 그렇게해야한다면 문서를 읽으십시오. 정적 파일을 제공하는 방법.
다른 팁
개발 전용
이를 수행하여 개발 서버와 함께 사용할 정적 미디어 서버를 설정할 수 있습니다. urls.py
파일. 강제 디버그 조건부와 함께 사용 방법을 보여주는 코드를 첨부했습니다.)
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/미디어의 하위 디렉토리에서 settings.py
MEDIA_ROOT = os.path.join(os.path.dirname(__file__), 'html/media/').replace('\\','/')
개발이 완료된 후 프로젝트는 정적 미디어 파일을 제공하는 웹 서버에 배치됩니다. 아파치 지침 사용.
이것은 이미지 필드로 이미지 파일을 보여주는 올바른 방법입니다. 사용자 프로필 사진이 있다고 상상해보십시오.
Models.py :
UserProfile:
profilePic= models.ImageField( upload_to='PATH_TO_UPLOAD', blank=True, null=True)
settings.py :
MEDIA_ROOT = 'FULL_PATH_OF_MEDIA'
MEDIA_URL = 'URL_OF_MEDIA'
urls.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 vs media_files
Django 404 페이지를 받고 있다고 생각합니다. 이미지 중 하나에 직접 액세스하고 그것이 일어나고 있는지 확인하십시오.
그렇다면 웹 서버를 ~ 아니다 미디어 계층 내에서 요청을 Django로 보내지 않고 대신 직접 제공하십시오. 다음은 내 Apache Conf 파일의 저격입니다. 첫 번째 섹션은 Apache에게 모든 것을 Django로 보내라고 지시합니다. 두 번째 섹션에는 "Sethandler None"이 있으며 "정상적인 방식으로 /미디어를 다루는 것"이라고 표시됩니다.
보다 http://docs.djangoproject.com/en/dev/howto/deployment/modpython/ 모든 흥미로운 세부 사항에 대해.
princeofpinot.com (일명 팝) 용 부분 httpd.conf 파일 :
<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>
원래 질문은 Dev 서버와 관련이 있지만 생산 환경을 찾고있는 다른 사람에게는 답변입니다.
https://docs.djangoproject.com/en/1.8/howto/static-files/deployment/ 프로덕션 환경에서 Django가 파일을 제공하는 방법에 대한 안내서를 제공합니다. 가이드의 톤에서 파일을 처리하거나 Apache와 함께 mod_wsgi를 사용하는 별도의 웹 서버를 갖는 것이 가장 좋다는 것을 암시하는 것 같습니다.