IT TIP

Django에서 "미디어"파일에 액세스

itqueen 2020. 12. 27. 20:35
반응형

Django에서 "미디어"파일에 액세스


나는 Django를 사랑하고 싶지만 개발 환경에서 정적 및 미디어 파일의 이러한 사업은 나를 미치게 만듭니다. 내 어리 석음에서 나를 구해줘.

나는 내 개발 시스템에 있습니다. media내 프로젝트 디렉토리의 루트에 폴더 가 있습니다.

에서 settings.py: MEDIA_ROOT = ''MEDIA_URL = '/media/'.

에서 urls.pyI 있습니다 :

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_URLand and STATIC_URLand-내가 뭔가를 놓치고 있습니까?

(2) 만약 collectstatichoses 라면 /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

반응형