Django에서 "미디어"파일에 액세스
나는 Django를 사랑하고 싶지만 개발 환경에서 정적 및 미디어 파일의 이러한 사업은 나를 미치게 만듭니다. 내 어리 석음에서 나를 구해줘.
나는 내 개발 시스템에 있습니다. media
내 프로젝트 디렉토리의 루트에 폴더 가 있습니다.
에서 settings.py
: MEDIA_ROOT = ''
및 MEDIA_URL = '/media/'
.
에서 urls.py
I 있습니다 :
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': settings.MEDIA_ROOT, }),
)
하지만 미디어 파일을 얻을 수있는 유일한 방법은 참조하는 것입니다 /media/media/
예를 들어 <img src="/media/media/image.png" />
.
나는 기대하고 (원한다)
<img src="/media/image.png" />
아무도 여기서 무슨 일이 일어나고 있는지 알려주고 미디어 파일 처리를 설정하는 간단한 방법을 알려줄 수 있습니까?
대단히 감사합니다.
@Timmy O'Mahony-감사합니다! 서사시 게시물, 매우 명확합니다. 그러나 몇 가지 질문이 남습니다.
(1) /media/
and /static/
, not media/
and static/
as MEDIA_URL
and and STATIC_URL
and-내가 뭔가를 놓치고 있습니까?
(2) 만약 collectstatic
hoses 라면 /static/
, 사이트의 CSS 파일과 같은 사이트 수준의 CSS를 어디에 배치합니까? /static/
, 분명히 아닙니다 .
(3) 나는 그것들을 프로젝트 루트의 '_'디렉토리에 넣고 그것을 STATICFILES_DIRS
가리 키도록 설정 했습니다. 그리고 그것은 urlpatterns
지시 에도 불구하고 개발 서버가 정적 파일을 얻는 곳인 것 같습니다 . 이것이 틀렸다면 개발 중에 사이트 수준 CSS를 어디에 배치하고 collectstatic
수정할 때 의 워크 플로는 무엇 입니까? 한곳에서 편집하고 편집 할 때마다 다른 곳에서 수집해야합니까?
왜 MEDIA_ROOT
설정을 비워 두셨습니까? 미디어 디렉토리의 경로 여야합니다. 당신이 말한대로, 미디어라는 서브 디렉토리에, 때문에 media
, 당신은에 넣어해야합니다 MEDIA_ROOT
.
폴더 설정 :
프로젝트 루트는 다음과 같아야합니다.
/app1
/app2
/media
/static
/templates
urls.py
settings.py
manage.py
미디어 웹 사이트의 정상적인 사용 중에 업로드 할 수있는 이미지 다운로드 및 재료 등의 홀드 일에 예상되는 폴더 (개발 완료, 즉 후)
정적 폴더 사이트의 개발의 일부인 모든 CSS / JS 및 기타 자료를 보유하도록되어
Settings.py :
MEDIA_ROOT 는 위에서 언급 한 정적 폴더에 대한 절대 서버 경로입니다. 즉, 다음과 같아야합니다.
MEDIA_ROOT = "/User/Bob/Sites/MySite/Project_root/media/"
MEDIA_URL 은 사이트를 볼 때 미디어 파일에 액세스해야하는 상대 브라우저 URL입니다. (일반적으로)
MEDIA_URL = "media/"
즉, 모든 자료는 http://example.com/media/ 에서 볼 수 있습니다 .
마찬가지로 STATIC_ROOT 는 다음과 같아야합니다.
STATIC_ROOT = "/User/Bob/Sites/MySite/Project_root/static/"
및 STATIC_URL는 수
STATIC_URL = "static/"
파일 제공 :
이제 django에 이러한 폴더가 있어야하는 위치와 액세스 할 올바른 URL을 알려 주었으므로 모든 요청을 폴더에 올바르게 제공해야합니다.
일반적으로 프로덕션 단계에서는 웹 서버가 정적 파일 및 미디어 파일을 처리하도록합니다.
그래도 개발 중이라면 django 개발 서버를 통해 서비스를 제공 할 수 있습니다.
이렇게하려면, 당신은 경로에에에 오는 모든 요청을 알려 http://example.com/media 당신의 MEDIA_ROOT과에 와서 모든 요청 http://example.com/static 당신의 STATIC_ROOT에 있습니다.
이렇게하려면 다음과 같이 URLS.py에 URL을 추가합니다.
from django.conf import settings
if settings.DEBUG:
urlpatterns += patterns('',
url(r'^media/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.MEDIA_ROOT,
}),
url(r'^static/(?P<path>.*)$', 'django.views.static.serve', {
'document_root': settings.STATIC_ROOT,
}),
)
추가 :
각각 고유 한 CSS 및 JS 파일이있는 여러 앱이있는 경우 하나의 / static / 폴더에 버리고 싶지 않을 수 있습니다. 해당 파일이 속한 앱의 하위 폴더에 저장하는 것이 유용 할 수 있습니다.
/app1/static/ # Specific static folder
/app2/static/
/media/
/static/ # Root static folder
Now, your webserver/development server is only looking for static files where you told it to look (i.e. the root static folder) so you need to collect all the files in the subfolders and copy them to the root static folder. You could do this by hand, but django provides a command to do this for you (this is the whole point of the static app)
./manage collectstatic
I followed timmy procedure but I got an error that No module name django.views
. When I use import django.views
in my virtualenv everything works fine i.e It's not an issue with the import of library.
However, I was able to solve this problem by following this procedure in my main urls file
from django.conf.urls.static import static
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
https://docs.djangoproject.com/en/dev/howto/static-files/
I had the same problem so I added these lines
from django.conf.urls import url, include
from django.contrib import admin
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'', include('blog.urls')),
url(r'^admin/', admin.site.urls),
url(r'^cadmin/', include('cadmin.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
in urls.py
in the Django project configuration directory. more information :https://overiq.com/django/1.10/handling-media-files-in-django/
In your settings.py, make sure you add
django.core.context_processors.media
in your TEMPLATE_CONTEXT_PROCESSORS.Otherwise the MEDIA_ROOT won't work when you use it in the templates.
I am using Django 1.10. And my media folder is 'uploads' This is the configuration in my settings.py:
MEDIA_ROOT = os.path.join(BASE_DIR, 'uploads')
MEDIA_URL = '/uploads/'
And in the template I put the name o my MEDIA_URL before de object.name instead object.url like this:
<img src="uploads/{{ imagen_identificativa.name }} " alt="{{imagen_identificativa}}">
And it works for me. I hope this helps.
ReferenceURL : https://stackoverflow.com/questions/6418072/accessing-media-files-in-django
'IT TIP' 카테고리의 다른 글
얼마나 자주 리팩토링해야합니까? (0) | 2020.12.27 |
---|---|
인스트루먼트 할당은 사용자 정의 클래스의 객체 할당 및 할당 해제를 추적합니다. (0) | 2020.12.27 |
Android API v2 용 Google지도에 내 위치를 표시하는 방법 (0) | 2020.12.27 |
'System.Web.Security.SqlMembershipProvider'에는 스키마 버전 '1'과 호환되는 데이터베이스 스키마가 필요합니다. (0) | 2020.12.27 |
varchar가 숫자인지 확인 (TSQL) (0) | 2020.12.27 |