django - urls - 장고 이미지




장고 MEDIA_URL 및 MEDIA_ROOT (8)

업로드 된 미디어에 대해 특정 URLconf 패턴을 설정해야합니까?

예. 개발을 위해 URLconf에 추가하는 것만 큼 쉽습니다.

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

그러나 프로덕션 환경에서는 Apache, lighttpd, nginx 또는 원하는 웹 서버를 사용하여 미디어를 제공해야합니다.

장고 관리자를 통해 이미지를 업로드하고 프론트 엔드의 페이지 또는 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 패턴을 설정해야합니까?

어떤 충고라도 받아 들였다.

감사.


Django 1.10.6을 사용하여 django-publications app 용 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)

settings.py 에서 @ r-allela가 제공 한 답을 수정했습니다.

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

공식 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)

너의 설정은 괜찮아. 일부 웹 서버에서는 미디어 및 정적 폴더 파일을 구체적으로 지정해야합니다. 예를 들어 pythonanywhere.com에서 '웹'섹션으로 이동하여 미디어 폴더 및 정적 폴더의 URL을 추가해야합니다. 예 :

  URL                     Directory                
/static/            /home/Saidmamad/discoverthepamirs/static     
/accounts/static/   /home/Saidmamad/discoverthepamirs/accounts/static    
/media/            /home/Saidmamad/discoverthepamirs/discoverthepamirs/media    

나는 그것이 늦었다는 것을 알고 있지만 같은 문제로 인해이 링크를 방문하는 사람들을 돕는다.)


여기 내가 장고 2.0에서 한 일. 첫 번째 MEDIA_ROOT를 setting.py의 MEDIA_URL로 setting.py

MEDIA_ROOT = os.path.join(BASE_DIR, 'data/') # 'data' is my media folder
MEDIA_URL = '/media/'

다음을 추가하여 TEMPLATE_CONTEXT_PROCESSORS 에서 media 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>

이것은 장고 1.10의 경우 :

 if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

이것이 내가 Django 1.11을 사용하여 Python 3.6에서 DEBUG = False 모드로 이미지를 렌더링 한 것입니다.

from django.views.static import serve
urlpatterns = [
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
# other paths
]

장고 1.8 (적어도) :

사용하는 경우

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

위에서 설명한 것처럼 "catch all"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')),