Programing

{% load staticfiles %}와 {% load static %}의 차이점은 무엇입니까?

lottogame 2020. 9. 12. 11:19
반응형

{% load staticfiles %}와 {% load static %}의 차이점은 무엇입니까?


질문의 가장 중요한 부분은 주제입니다.

어떤 경우에 어떤 태그가 가장 좋은지 궁금합니다. 게다가 ... 템플릿에 settings.STATIC_URL포함 된 코드를 찾았습니다 {{STATIC_URL}}.

조금 혼란 스러워요.


내장 static템플릿 태그 "link [s] to static files that are stored in STATIC_ROOT".

staticfiles있는 contrib 응용 프로그램의 static템플릿 태그는 "구성된 사용 STATICFILES_STORAGE"파일을 배포 할 아닌 로컬 스토리지 백엔드를 사용하는 경우 특히 유용합니다 "입니다, 주어진 상대 경로의 전체 URL을 생성 저장"을.

기본 제공 static템플릿 태그의 문서 (위에 링크 됨)에는 "클라우드 서비스를 사용하여 정적 파일을 제공하는 것과 같은 고급 사용 사례가있는 경우" staticfilescontrib 앱의 static템플릿 태그 를 사용하라는 메모 가 있으며 다음 예제를 제공합니다. 이렇게 :

{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />

원하는 경우 {% load staticfiles %}보다 사용할 수 {% load static from staticfiles %}있지만 후자가 더 명시 적입니다.


차이점이 무엇인지 모르지만 유스 케이스 차이를 발견했습니다 (Apache를 통해 실행되는 django 1.9.1 사용, Python 3.4에서 wsgi 사용). 내 앱 ImageFields에는 데이터베이스에 몇 가지 이미지 가 있습니다. 내 템플릿에서 다음과 같은 코드를 사용하는 경우 :

<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>

그런 다음을 사용 {% load static %}하면 django가 TypeError( Cannot mix str and non-str arguments)를 던집니다 . 이것은 아마도 object.image가 문자열이 아니기 때문일 것입니다. 이것은 ImageField나중에 어떤 단계에서 문자열로 변환되는 것입니다. 그러나 사용하면 {% load staticfiles %}이러한 오류가 발생하지 않습니다.

불행히도 문제를 디버깅하는 데 몇 시간을 소비 한 후에이 차이를 발견했습니다. 첫 번째 옵션을 사용할 때, 즉 다음과 같이 개체에 문자열 변환기 메서드를 추가하는 방법을 찾을 수있었습니다.

#image string
def image_str(self):
    return str(self.image)

이 지식이 누군가에게 유용하기를 바랍니다.


그것에 대한 좋은 설명이있는 문서를 참조하십시오 . 실제로 {% static %}템플릿 태그는 STATICFILE_STORAGE 의 위치를 ​​알고 있습니다.

문서가 말했듯이 :

 {% load static from staticfiles %} <img src="{% static "images/hi.jpg"
 %}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg".

이는 클라우드 서비스 또는 CDN에서 정적 파일 제공에 설명 된대로 로컬이 아닌 저장소 백엔드를 사용하여 파일을 배포 할 때 특히 유용합니다.

표시하지 않고 정적 URL을 검색하려면 약간 다른 호출을 사용할 수 있습니다.

{% load static from staticfiles %}
{% static "images/hi.jpg" as myphoto %}
<img src="{{ myphoto }}" alt="Hi!" />

도움이 되길 바랍니다 !!


{% load staticfiles %} S3와 같은 다른 스토리지를 사용할 때 매우 유용합니다. 그러면 S3 URL로 변환됩니다.


Django 문서는 이제 {% load static %}.

{% load staticfiles %} 작동하지만 더 이상 사용되지 않는 것 같습니다.

https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static

참고 URL : https://stackoverflow.com/questions/24238496/what-is-the-difference-between-load-staticfiles-and-load-static

반응형