2012-03-06 4 views
19

{{STATIC_URL}}을 (를) 자바 스크립트 파일에 전달하는 가장 좋은 해결책은 무엇입니까?STATIC_URL을 django 파일 javascript에 전달

저는 장고와 파이썬으로 작업하고 있습니다. 사전에

감사합니다. 감사합니다.

+0

당신이 템플릿에 자바 스크립트 파일을로드 의미인가? 또는 javascript 파일에서 {{STATIC_URL}}의 값을 사용한다는 의미입니까? – arnkore

답변

19

django-compressor 귀하는 필요한 모든 JS 또는 CSS를 하나의 파일로 압축하고 파일 크기를 최적화하여 사이트를 최적화 할 수 있습니다.

업데이트 : 기본적으로 압축기는 상대 URL을 STATIC_URL을 사용하여 절대 URL로 변환합니다. 개발 버전을 다운로드하면 장고 템플릿 엔진 파서가 제공되어 CSS 파일에서 장고 템플릿 코드 (예 : {% static %})를 직접 사용할 수 있습니다.

https://github.com/jezdez/django_compressor

는 템플릿 엔진을 통해 JS 또는 CSS 파일을 구문 분석 설치 한 후 settings.py에서 TemplateFilter을 사용합니다. 이제 {% compress js %} 블록 내의 JS가 장고 템플릿 언어에 의해 구문 분석됩니다
COMPRESS_JS_FILTERS = [ 
    'compressor.filters.template.TemplateFilter', 
] 

...

{% compress js %} 
    <script src="/my_script.js" type="text/javascript"></script> 
{% endcompress %} 

// my_script.js 
alert('{{ STATIC_URL|escapejs }}'); 

당신은 최선의 방법을 요구 -이 최고라고 생각합니다. 동적 파일을 제공하는 것보다 확실히 좋습니다. 정적 URL 값을 가진 글로벌 자바 스크립트 변수를 사용하여

+2

이것은 훌륭한 제안입니다! 장고 - 압축기는 멋진 프로젝트입니다. – slypete

+0

@slypete, 네, 정말 대단합니다! 파일 수, 파일 크기를 최적화하고 템플릿 변수를 추가하십시오. 훌륭한. 이것은 내 최신 거대한 장고 게임 체인저입니다. 다음은 무엇입니까? –

+0

저는이 도구를 정말 좋아합니다. 하나의 메모는 github에서 복제하지 않고 'pip install django_compressor'를 사용하여 설치하는 것입니다. 설치하는 데 10 분이 채 걸리지 않았습니다. 내 settings.py에서 명시 적으로 'COMPRESS_ENABLED = True'를 설정하는 문제는 다른 응용 프로그램에서 이미 DEBUG = True로 설정 한 것처럼 읽을 수 있으며 실제로 압축하지 않습니다. – JayCrossler

36

더 간단하다

<script language="javascript">var STATIC_URL = "{{ STATIC_URL|escapejs }}";</script> 
<script src="{{ STATIC_URL }}js/myfile.js"></script> 

그런 다음, 당신은 단순히 myfile.js에 STATIC_URL를 호출하여 정적 URL을 사용할 수 있습니다

html = '<img src="'+STATIC_URL+'/icons/flags/tn.gif">'; 
+0

정말 멋집니다! –

+0

나는이 해결책을 좋아한다! – andi

5

을 이것이 @Yuji 'Tomita'Tomita의 논평을 보충하는 것이라고 생각합니다.

이것은 나를 위해 일했습니다.

이것은 내가 django js 파일에서 STATIC_URL을 사용하기위한 장고 압축기의 전체 설정을 한 방법입니다. 당신의 INSTALLED_APPS 설정으로

https://github.com/jezdez/django_compressor

pip install django_compressor 

추가 '컴프레서'

INSTALLED_APPS = (
    # other apps 
    "compressor", 
) 

가 settings.py에서, 디버그 모드에서 압축을 테스트하려면 :

COMPRESS_ENABLED = True 

을 경우 당신 Django의 staticfiles contrib 앱 (또는 독립 실행 형 Django-staticfiles)을 사용해야합니다. django.contrib.staticfiles와 예를 들어 STATICFILES_FINDERS 설정에 D 장고 압축기의 파일 찾기 :

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
    # other finders.. 
    'compressor.finders.CompressorFinder', 
) 

는 설정에서 TemplateFilter을 사용합니다.py를 설치 한 후 템플릿 엔진을 통해 js 또는 css 파일을 구문 분석하십시오. 이제 {%의 압축 JS %} 블록 내의 JS가 장고 템플릿 언어에 의해 구문 분석됩니다

COMPRESS_JS_FILTERS = [ 
    'compressor.filters.template.TemplateFilter', 
] 

...

{% load compress %} 

{% compress js %} 
    <script src="/my_script.js" type="text/javascript"></script> 
{% endcompress %} 

// my_script.js 

alert('{{ STATIC_URL|escapejs }}'); 
+0

문서를 읽었을 때 "STATICFILES_FINDERS"설정을 찾지 못했습니다. 귀하의 의견을 읽고 그것을 추가 한 후, 내 애플 리케이션이 작동하기 시작했다. 감사! – mk2

관련 문제