programing

장고 미디어_URL 및 MEDIA_ROOT

prostudy 2022. 9. 11. 15:37
반응형

장고 미디어_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

이것을 URL에 입력해 보세요.화이

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}))

이렇게 하면 Django에서 다음 시간에 정적 미디어를 제공할 수 있습니다.DEBUG = True(로컬 컴퓨터에서 실행 중인 경우) 단, 프로덕션으로 이동하여 웹 서버 구성이 정적 미디어를 처리하도록 할 수 있습니다.DEBUG = False

공식 장고 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-by-user-by-a-user-development-development 를 참조해 주세요.

여기 장고 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유효하게 되어 있습니다.Now everyRequestContext변수가 포함됩니다.MEDIA_URL.

이것으로, 다음의 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}))

위에서 설명한 바와 같이 urlpatterns = [ ]에서 기본 뷰로 향하는 "sublic all" URL 패턴이 앞에 없는지 확인합니다..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/'

메인 @isashwanipandey가 제공하는 바와 @isashwanipandey는 @isashwanipandey를 사용합니다.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:

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

또 하나의 URLconf가 것입니다.{{ MEDIA_URL }}템플릿에서는 동작하지 않습니다.이 문제를 해결하려면 settings.py에서

django.core.core_processors.media

안에서TEMPLATE_CONTEXT_PROCESSORS.

디버깅 모드의 경우 => 3.0에 대해 위에서 설명한 단계를 따릅니다.

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

또한 위의 정적 URL은 저의 메인 프로젝트 urls.py 파일에서만 작동했습니다.처음에 앱에 추가하려고 했는데 왜 이미지가 보이지 않는지 궁금했어요.

마지막으로, 다음의 설정을 실시합니다.

MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

python 3.0+ 를 사용하고 있는 경우는, 다음과 같이 프로젝트를 설정합니다.

설정

STATIC_DIR = BASE_DIR / 'static'
MEDIA_DIR = BASE_DIR / 'media'
MEDIA_ROOT = MEDIA_DIR
MEDIA_URL = '/media/'

주요 URL

from django.conf import settings
from django.conf.urls.static import static

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

mika Carrick에 django 1.8에 대한 답변 추가:

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

이는 Django 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
]

프로덕션 환경에서는 Django가 미디어 루트를 자동으로 로드하지 않으므로 URL 패턴 바로 뒤에 다음 코드를 추가하여 이 문제를 해결할 수 있습니다.

urlpatterns = [
       ''''
         your urls
       ''''
    ] + static(settings.MEDIA_URL, document_root = settings.MEDIA_ROOT)
    if settings.DEBUG:
        urlpatterns += static(settings.MEDIA_URL,
                              document_root=settings.MEDIA_ROOT)

둘 이상의 앱을 사용하고 있으며, 메인 앱 URL에 앱 URL을 포함하고 있다면 이 코드(구성)를 메인 프로젝트 URL에 추가하기만 하면 됩니다.

세팅은 문제 없습니다.일부 웹 서버에서는 미디어 및 정적 폴더 파일을 구체적으로 지정해야 합니다.예를 들어 pythonanywhere.com에서 'Web' 섹션으로 이동하여 미디어 폴더 및 정적 폴더의 URL을 추가해야 합니다.예를 들어 다음과 같습니다.

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

늦은 것은 알지만, 같은 문제로 이 링크를 방문하시는 분들을 돕기 위해서입니다.

개발 중인 Django 3.0+의 경우, 메인 URL에 다음과 같이 기재되어 있습니다.py:

urlpatterns = [
   # rest of your url paths here..
]

from django.conf import settings
from django.conf.urls.static import static

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

다음 코드를 "settings.py"에 추가하여 액세스(열기 또는 표시)합니다.

# "settings.py"

from django.conf import settings
from django.conf.urls.static import static

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

언급URL : https://stackoverflow.com/questions/5517950/django-media-url-and-media-root

반응형