Django는 정적 파일 URL을 볼 수 있습니다.


133

reportlab pdfgen을 사용하여 PDF를 작성하고 있습니다. PDF에는에 의해 생성 된 이미지가 drawImage있습니다. 이를 위해 이미지의 URL이나보기의 이미지 경로가 필요합니다. URL을 만들었지 만 이미지의 로컬 경로는 어떻게 얻습니까?

URL을 얻는 방법 :

prefix = 'https://' if request.is_secure() else 'http://'
image_url = prefix + request.get_host() + STATIC_URL + "images/logo_80.png"

답변:


287

이것이 Google의 최고 결과이므로 다른 방법을 추가 할 것이라고 생각했습니다. 개인적으로 나는 이것을 장고 프레임 워크에 구현하기 때문에 이것을 선호합니다.

# Original answer said:
# from django.templatetags.static import static
# Improved answer (thanks @Kenial, see below)
from django.contrib.staticfiles.templatetags.staticfiles import static

url = static('x.jpg')
# url now contains '/static/x.jpg', assuming a static path of '/static/'

2
정적 URL에 호스트 이름을 추가하는 명확한 방법이 있는지 알고 있습니까 (STATIC_URL에없는 경우)? 사용자가 상대 URL을 가진 리소스를 찾을 수없는 메일에 이미지 나 다른 리소스를 추가해야합니다.
gepatino

3
디버그에서 실행하는 동안 (DEBUG = False로 아직 시도하지 않은) 나에게는 작동하지 않습니다. 나는 단순히 정적 메소드로 전달 된 경로를 반환합니다. 장고 사용하기 1.6. 이견있는 사람?
Shawn

django.contrib.staticfiles.templatetags.staticfiles를 사용하는 코드는 django-storages와 호환되는 유사한 것을 고려해야한다고 생각합니다.
jdcaballerov

@gepatino request.build_absolute_uri여기에 설명 된대로 결과를 라우팅 할 수 있습니다 . stackoverflow.com/questions/2345708/…
dyve

17
장고 2.0에서는 지원 중단 알림이 표시됩니다. from django.templatetags.static import static대신 사용하십시오 .
Flimm

86

당신이 (예 : "해시"취득한다 "스토리지 캐시의"장고 프로젝트와 정적 파일의 최종 URL 경로에 사용하는 경우 dyve의 대답은, 그러나, 좋은 하나입니다 style.aaddd9d8d8d7.css 에서 있는 style.css ) 그런 다음, 에 정확한 URL을 얻을 수 없습니다 django.templatetags.static.static(). 대신 템플릿 태그를 사용 django.contrib.staticfiles하여 해시 된 URL을 가져와야합니다.

또한 개발 서버를 사용하는 경우이 템플릿 태그 메소드는 해시되지 않은 URL을 반환하므로 개발 또는 프로덕션 호스트에 관계없이이 코드를 사용할 수 있습니다! :)

from django.contrib.staticfiles.templatetags.staticfiles import static

# 'css/style.css' file should exist in static path. otherwise, error will occur 
url = static('css/style.css')

1
고마워요 ... 왜 내 MD5 해시가 주입되지 않는지 알아내는 데 시간이 걸렸습니다
ilovett

4
이 답변은 여전히 ​​인기를 얻고 있으며 적극적으로 사용되고 있으므로 @Kenial의 크레딧으로 허용되는 답변을 개선했습니다. 이것이 여전히이 문제에 대한 선호 솔루션입니다.
5

12

다른 방법이 있습니다! (장고 1.6에서 테스트)

from django.contrib.staticfiles.storage import staticfiles_storage
staticfiles_storage.url(path)

DEBUG가 False로 설정된 경우 해시 된 URL을 반환하므로 좋은 솔루션입니다. 선택적 같은 해시 URL을 강제로 : staticfiles_storage.url(path, force=True)
마크 기븐스

7

기본 static태그를 사용하십시오 .

from django.templatetags.static import static
static('favicon.ico')

django.contrib.staticfiles.templatetags.staticfiles(답변에있는 것처럼 ) 다른 태그가 있지만 Django 2.0 이상에서는 더 이상 사용되지 않습니다.


6

장고 3.0에서는 다음을 사용해야합니다 from django.templatetags.static import static.

from django.templatetags.static import static

...

img_url = static('images/logo_80.png')

5

@dyve의 답변이 개발 서버에서 작동하지 않았습니다. 대신 나는 그것을 해결했다 find. 기능은 다음과 같습니다.

from django.conf import settings
from django.contrib.staticfiles.finders import find
from django.templatetags.static import static

def get_static(path):
    if settings.DEBUG:
        return find(path)
    else:
        return static(path)

1

절대 URL (프로토콜, 호스트 및 포트 포함)을 얻으려면 request.build_absolute_uri다음과 같은 기능 을 사용할 수 있습니다 .

from django.contrib.staticfiles.storage import staticfiles_storage
self.request.build_absolute_uri(staticfiles_storage.url('my-static-image.png'))
# 'http://localhost:8000/static/my-static-image.png'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.