장고 미디어_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_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
유효하게 되어 있습니다.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
'programing' 카테고리의 다른 글
Android JSONObject - 플랫 JSON 객체를 루프하여 각 키와 값을 얻는 방법 (0) | 2022.09.11 |
---|---|
ES6/2015의 특수 안전 자산 액세스(및 조건부 할당) (0) | 2022.09.11 |
MySQL 오류 1054:필드 목록의 알 수 없는 열 'curent_timestamp' (0) | 2022.09.11 |
표시 가능한 DOM에 요소가 존재하는지 확인하려면 어떻게 해야 합니까? (0) | 2022.09.11 |
컴포넌트를클릭하면클래스를바디에추가하시겠습니까? (0) | 2022.09.11 |