[django] 장고 MEDIA_URL 및 MEDIA_ROOT
Django 관리자를 통해 이미지를 업로드 한 다음 프론트 엔드의 페이지 또는 URL을 통해 해당 이미지를 보려고합니다.
이것은 모두 내 로컬 컴퓨터에 있습니다.
내 설정은 다음과 같습니다.
MEDIA_ROOT = '/home/dan/mysite/media/'
MEDIA_URL = '/media/'
upload_to 매개 변수를 ‘images’로 설정했으며 파일이 디렉토리에 올바르게 업로드되었습니다.
'/home/dan/mysite/media/images/myimage.png'
그러나 다음 URL에서 이미지에 액세스하려고하면
http://127.0.0.1:8000/media/images/myimage.png
404 오류가 발생합니다.
업로드 된 미디어에 대해 특정 URLconf 패턴을 설정해야합니까?
모든 조언을 부탁드립니다.
감사.
답변
장고 업데이트 => 1.7
Django 2.1 문서 당 : 개발 중 사용자가 업로드 한 파일 제공
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
if settings.DEBUG
장고가 디버그 모드에서만 사용되도록 처리 하므로 더 이상 필요하지 않습니다 .
장고에 대한 원래 답변 <= 1.6
이것을 urls.py 에 넣으십시오.
from django.conf import settings
# ... your normal urlpatterns here
if settings.DEBUG:
# static files (images, css, javascript, etc.)
urlpatterns += patterns('',
(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT}))
이 기능을 사용하면 DEBUG = True
(로컬 컴퓨터에서 실행할 때) Django에서 정적 미디어를 제공 할 수 있지만 프로덕션 및DEBUG = False
답변
Django DOC 공식을주의 깊게 읽으시면 가장 적합한 답변을 찾으실 수 있습니다.
이를 해결하는 가장 쉽고 쉬운 방법은 다음과 같습니다.
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = patterns('',
# ... the rest of your URLconf goes here ...
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
답변
Django 1.9의 경우 설명서에 따라 다음 코드를 추가해야합니다.
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
자세한 내용은 여기를 참조하십시오 : https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-files-uploaded-by-a-user-during-development
답변
Django 2.0에서 내가 한 일. MEDIA_ROOT에 MEDIA_URL을 (를) 처음으로 설정setting.py
MEDIA_ROOT = os.path.join(BASE_DIR, 'data/') # 'data' is my media folder
MEDIA_URL = '/media/'
그런 다음 사용 media
context_processors
에 TEMPLATE_CONTEXT_PROCESSORS
추가하여
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
#here add your context Processors
'django.template.context_processors.media',
],
},
},
]
당신 media context processor
은 활성화되었습니다, 이제는 모든 RequestContext
변수를 포함합니다 MEDIA_URL
.
지금 당신은 당신의에 액세스 할 수 있습니다 template_name.html
<p><img src="{{ MEDIA_URL }}/image_001.jpeg"/></p>
답변
업로드 된 미디어에 대해 특정 URLconf 패턴을 설정해야합니까?
예. 개발을 위해 이것을 URLconf에 추가하는 것만 큼 쉽습니다.
if settings.DEBUG:
urlpatterns += patterns('django.views.static',
(r'media/(?P<path>.*)', 'serve', {'document_root': settings.MEDIA_ROOT}),
)
그러나 프로덕션 환경에서는 Apache, lighttpd, nginx 또는 선호하는 웹 서버를 사용하여 미디어를 제공해야합니다.
답변
(장소) 장고 1.8의 경우 :
당신이 사용하는 경우
if settings.DEBUG:
urlpatterns.append(url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))
위에서 설명한 것처럼 기본보기로 향하는 “모두 포괄”URL 패턴이 urlpatterns = []에서 끝나지 않아야합니다. .append는 추가 된 스키마를 목록의 끝에 배치하므로 이전 URL 패턴과 일치하지 않는 경우에만 테스트됩니다. if 문과 상관없이 “catch all”url 패턴이 맨 끝에 추가되는 다음과 같은 것을 사용하면이를 피할 수 있습니다.
if settings.DEBUG:
urlpatterns.append(url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}))
urlpatterns.append(url(r'$', 'views.home', name='home')),
답변
Django 1.10.6을 사용하여 django-publications 앱용 PDF를 제공하기 위해 변경해야 할 사항은 다음과 같습니다 .
다음에서 미디어 디렉토리에 대해 동일한 정의를 사용했습니다 settings.py
.
MEDIA_ROOT = '/home/user/mysite/media/'
MEDIA_URL = '/media/'
@thisisashwanipandey가 제공 한 프로젝트 메인에서 urls.py
:
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
# ... the rest of your URLconf goes here ...
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
@ r-allela가 제공 한 답변의 수정 settings.py
:
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
# ... the rest of your context_processors goes here ...
'django.template.context_processors.media',
],
},
},
]