2009-07-26 7 views
46

私はほとんどすべてのページで使用する小さなタイポグラフィ関連のtemplatetagライブラリを持っています。今すぐテンプレートごとにロードする必要がありますデフォルトでは、すべてのビューのDjangoテンプレートタグライブラリをロードします

{% load nbsp %} 

すべてのビューとテンプレートを一度に「グローバルに」読み込む方法はありますか?ロード・タグを基本テンプレートに入れても機能しません。

答えて

68

django.template.loaderadd_to_builtinsメソッドがあります。 templatetagsモジュールの名前を文字列として渡すだけです。

from django.template.loader import add_to_builtins 

add_to_builtins('myapp.templatetags.mytagslib') 

mytagslibは、どのテンプレートでも自動的に利用可能です。ジャンゴ1.7で

+1

ありがとうございます。 –

+23

これを行うことができますが、ある時点で後悔する可能性が高いことに注意してください(私はそれをやって、それを後悔しました)。これにより、テンプレートはadd_to_builtinsを持たない他のプロジェクトに移植することができなくなります(テストランナーがadd_to_builtinsも実行していることを確認しない限り)。全体としては、利便性の点で非常に小さな利益のために、より脆弱になります。 –

+18

新しい開発者は、標準ライブラリには存在しないタグを使用して迷惑をかけることはありません。 :)覚えておいて、明示的なものは暗黙的なものよりも良い。 –

26

ちょうどそれは、Djangoの1.9リリースで変更されますfrom django.template.base import add_to_builtins

+3

なぜdownvoteですか?受け入れられた答えが時代遅れだったので、これは私の一日を救った! Django 1.7ではインポートパスが変更されました。ありがとうbsao! –

+0

これは[既存の回答](http://stackoverflow.com/a/1185049/1075247)のコメントまたは編集ですか?それはそれ自身では意味をなさない。 – Pureferret

27

のために交換してください。 1.9以降

、正しいアプローチはOPTIONSbuiltinsキーの下にテンプレートタグやフィルタを設定します - 以下の例を参照してください。

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'builtins': ['myapp.builtins'], 
     }, 
    }, 
] 

詳細:Djangoの1.9では https://docs.djangoproject.com/en/dev/releases/1.9/#django-template-base-add-to-builtins-is-removed

+0

今のところ(Django 1.9)、これは受け入れられた答えでなければなりません。 –

+0

''builtins':['django.templatetags.i18n']、'ああええ。 –

4

libraries辞書がありますがテンプレートエンジンに登録するために、テンプレートタグモジュールのラベルと点線のPythonパスを使用します。これは、新しいライブラリを追加したり、既存のライブラリの代替ラベルを提供するために使用できます。

TEMPLATES = [ 
    { 
     'BACKEND': 'django.template.backends.django.DjangoTemplates', 
     'DIRS': [], 
     'APP_DIRS': True, 
     'OPTIONS': { 
      'context_processors': [ 
       'django.template.context_processors.debug', 
       'django.template.context_processors.request', 
       'django.contrib.auth.context_processors.auth', 
       'django.contrib.messages.context_processors.messages', 
      ], 
      'libraries': { # Adding this section should work around the issue. 
       'custom_tags' : 'myapp.templatetags.custom_tags',#to add new tags module. 
       'i18n' : 'myapp.templatetags.custom_i18n', #to replace exsiting tags modile 
      }, 
     }, 
    }, 
] 
関連する問題