[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_processorsTEMPLATE_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',
            ],
         },
    },
]