2009-05-21 4 views
25

두 번째 시간이 자세한 내용을 물어 해당 프로젝트 내 모든 응용 프로그램에서 공유 프로젝트 ...이 방법장고 - 넓은 templatetags가

나는 일반적인 태그가하는 프로젝트 넓은 templagetags 디렉토리를 가지고 싶습니다 모든 앱에서 사용하는 경우 필요한 경우 각 앱에 자체 태그가있을 수 있습니다.

하자

내가 가진 말 :

proj1/app1 
proj1/app1/templatetags/app1_tags.py 

proj1/app2 
proj1/app2/templatetags/app2_tags.py 

proj1/templatetags/proj1_tags.py 

proj1/templates/app1/base.html 
proj1/templates/app1/index.html 
proj1/templates/app2/base.html 
proj1/templates/app2/index.html 

장소 :

proj1/templates/app1/base.html 
----------- 
{% load proj1_tags %} 
{% load app1_tags %} 

proj1/templates/app1/index.html 
----------- 
{% extends "base.html" %} 

proj1/templates/app2/base.html 
----------- 
{% load proj2_tags %} 
{% load app2_tags %} 

proj1/templates/app2/index.html 
----------- 
{% extends "base.html" %} 

겠습니까이 작품? 그것은 나를 위해 작동하지 않았다. 로드 할 proj1_tags를 찾을 수 없습니다. 그래서 같은

답변

36

이 그것을 할 수있는 권리 방법인지 모르겠지만, 내 장고 애플 리케이션에서, 나는 항상 lib "응용 프로그램"에 공통 템플릿 태그를 배치 :

proj/ 
    __init__.py 
    lib/ 
     __init__.py 
     templatetags/ 
      __init__.py 
      common_tags.py 

lib 앱을 INSTALLED_APPS 목록에 settings.py에 추가하십시오.

+2

내가 보통 프로젝트 후 응용 프로그램 이름을 지정합니다. –

+3

'common' 또는'commons'도 좋은 이름이 될 수 있습니다. –

+0

html 파일에서 호출하는 방법은 무엇입니까? '{% load common_tags %}'만 하시겠습니까? – andi

3

장고는 INSTALLED_APPS의 각 응용 프로그램에 대해 전역 templatetags 등록 (및 솔루션이 작동하지 않는 이유는 다음과 같습니다 프로젝트 장고에 의해 이해 등의 응용 프로그램되지 않습니다) —가 (모든 템플릿에서 사용할 수있는 제대로 등록 제공).

나는 보통 (사이트의 시작 페이지처럼) 기타 기능를 처리하는 응용 프로그램을 가지고이 특정 응용 프로그램과 관련이없는 templatetags을 넣어, 그러나 이것은 순전히 화장품입니다.

0

장고는 응용 프로그램에서 작동합니다. INSTALLED_APPS 설정을 참조하십시오.

다른 앱과 관련된 모든 것을 나눠 줄 것을 제안합니다. templatetags 문제에 대해서는 'common_tags'라는 응용 프로그램을 만들 수 있습니다. 그런 다음 설치 INSTALLED_APPS에이 설정을 사용하는, 그리고 당신과 같이 모든 템플릿에서 일반 태그를로드 할 수 있습니다 : 다른 사람이 언급 한 바와 같이

장고 1.9 있기 때문에, 추가 common 응용 프로그램을 만드는 데 더 이상 필요하지 않습니다
{% load XXXX %} 
9

. 프로젝트에 templatetags 디렉토리의 경로를 settings.pyOPTION['libraries'] dict에 추가하기 만하면됩니다.

그런 다음이 태그는 전체 프로젝트에서 액세스 할 수 있습니다. templatetags 폴더는 필요할 때마다 배치 할 수 있으며 다른 이름을 가질 수도 있습니다. Django docs에서

사용자 정의 예 : "project_core"- 그러나 동일한 솔루션 :

OPTIONS={ 
    'libraries': { 
     'myapp_tags': 'path.to.myapp.tags', 
     'project_tags': 'project.templatetags.common_extras', 
     'admin.urls': 'django.contrib.admin.templatetags.admin_urls', 
    }, 
} 
+1

이 태그가 호출되는 템플릿 html에서 '{% common_extras %}'를 사용하여 태그를 호출하기 전에 먼저 {{% load project_tags %}}를 먼저 호출해야합니다. – h4k1m