web-dev-qa-db-ja.com

Django: 'current_tags'は有効なタグライブラリではありません

私は小さなDjango友人から受け取ったプロジェクトを持っています。コードは彼のシステムで完全に動作します。しかし、私のシステムでは、サーバーを実行すると次のエラーメッセージが表示されます。

/でのTemplateSyntaxError

'current_tags'は有効なタグライブラリではありません:テンプレートライブラリcurrent_tagsが見つかりません、Django.templatetags.current_tagsを試しました

問題は、htmlファイルの行にあります。

{% load current_tags %}

このまったく同じコードは、彼のシステムでエラーなしで機能します。それは何でしょうか?

74
snakile

次のことをお勧めします。

  1. (ほとんどの場合)タグライブラリの依存関係のいずれかをインストールしていません。 current_tags.pyモジュール内のインポートを確認します。

  2. タグライブラリを含むアプリケーションがsettings.pyの下のINSTALLED_APPSに登録されていることを確認してください。

  3. タグライブラリを正常にインポートできることを確認してください。

    python manage.py Shell
    >>> from app.templatetags import current_tags
    

    これは、次のリンクが推奨するものを要約しています。つまり、エラー自体が、テンプレートの検索元について誤解を招く傾向があるということです。インポート時のエラーを静かに無視します。つまり、current_tags.py自体に構文エラーまたはImportErrorが発生する別の理由がある可能性があります。

他のすべてが失敗する場合は、このリンクを確認してください: http://www.b-list.org/weblog/2007/dec/04/magic-tags/

80
mif

この問題が発生したため、appname/templatetags /ディレクトリに空の___init__.py_ファイルを追加して修正しました。

74
ty.

可能性はたくさんあります:

  1. dev serverをリセットしていません。
  2. Templatetagファイルにdependency loopがあります。
  3. あなたミススペル何か(ディレクトリ、フォルダ、「ロード」のテンプレート名など)。
  4. アプリをINSTALLED_APPSに追加するのを忘れました。
62
Ctrl-C

サーバーの再起動で問題が解決しました。ドキュメントで言及しているに違いありません。

12
Krishnadas PC

次の構造があると仮定します。

- アプリケーション名

------- templatetags

--------------init。py

--------------templates_extras.py

-------init。py

-------settings.py

-manage.py

以下を確認する必要があります。

  • 「templatetags」が常駐するアプリケーション自体は、settings.pyのINSTALLED_APPSに実際にインストールされます(例:「Application_Name」)

  • 「templatetags」内に存在するタグモジュール自体は、settings.pyのINSTALLED_APPに既にインストールされています(「ApplicationName.templatetags.tempaltes_extras」など)

  • templatetagsディレクトリの下に「init。py」があることを確認してください

  • サーバーを再起動する必要があります

  • 場合によっては、生成された* .pycがすべて機能しなかった場合、それらをすべて削除してから再試行する必要があります

6

私は同じエラーを受け取っていましたが、別の理由であなたに伝えます(他の誰かが同じ問題を抱えている場合)。

私はすべてが正しかったのですが、template_tagsという名前のフォルダー内にカスタムタグがあり、長い検索の後、templatetagsである必要があることがわかりました。 フォルダ名が正確にtemplatetagsであることを確認してください

6
steven2308

「カスタムタグ」は有効なタグライブラリエラーではありません。カスタムタグがアプリにロードされていないため、より頻繁に発生します。

空のinit。pyを「カスタムテンプレートタグ」が配置されている同じフォルダ内に配置し、ターミナルで以下のコードを実行してカスタムテンプレートタグをロードします

touch __init__.py
5
Pawan Kumar

これに直面している他の人のために。アプリ名がMyAppで、タグフォルダー名がtemplatetagsで、その後settings.pyあなたが持っている必要があります:

INSTALLED_APPS = [
'MyApp',
'MyApp.templatetags'
]

Djangoアプリと、アプリパッケージの下にあるタグフォルダーの両方が必要です。

-> MyApp
    ---> models.py
    ---> views.py
    ---> templatetags
      -----> __init__.py
      -----> app_filters.py

そして、テンプレートファイルで:

{% load app_filters %}

また、app_filters.pyのように:

# coding=utf-8
from Django import template

register = template.Library()


@register.filter(name='get_item')
def get_item(dictionary, key):
    return dictionary.get(key)

上記の手順をすべて確認すると、問題が見つかる場合があります。

3
AmiNadimi

私にとっては、loadタグのライブラリ名を引用符で囲むのは間違いでした。

違う: {% load 'library_name' %}

正しい:{% load library_name %}

他の回答も参照してください。ここに着陸する前に、これらの問題もいくつか解決しました。

3
manu

Templatetagsフォルダーがpythonで初期化されていることを確認してください。疑わしい場合は、すべてのファイルをbakupしてください。

すべてのファイルを削除し、templatetagsフォルダー内でinit。pyファイルのみを作成し、サーバーを再起動します。

これでフォルダーはPythonの下に置かれました。

これは私のために働く...

3
Mohamed

loadステートメントが正しいことを確認してください。アプリの名前ではなく、ファイルの名前にする必要があります。たとえば、このアプリがある場合:

appname
├── __init__.py
├── templatetags
│   ├── __init__.py
│   └── foobarfilename.py

次に、テンプレートにこれを配置する必要があります。

{% load foobarfilename %}

もちろん、他の回答も確認する必要があります。

2
Flimm

テンプレートタグを作成し、settings.INSTALLED_APPSにインストールされたアプリ内の「templatetags」パッケージ内にあるはずです。dev-serverを再起動してください。

2
Liyosi

たぶん誰かがこれを便利だと思うでしょう:どういうわけか私はディレクトリに名前を付けていた'templatetags ' の代わりに 'templatetags'、つまり-末尾にスペースがあります。最終的に実現するために何時間もかかった。

1
Eran Goldin

私の場合はそうでした-私は使用しています

@register.inclusion_tag('template-to-use.html')

そのテンプレートを作成するのを忘れてすぐに動作し始めました。上記の答えはほとんどの問題に関連していることは知っていますが、誰かが役に立つと思うかもしれません。それは私に届いたはずです:

Template does not exist

しかし、そうではなく、これは機能しました。

0
Radek

私の場合、問題は{% load filter_method_name %}を使用していました

{% filename %}に変更する必要がありました

ここにリストされているアドバイスはすべて私を助けませんでした。私の特定のケースでは、サードパーティのアプリからテンプレートタグをロードする必要があるという問題があり、そのアプリのソースフォルダーをvirtualenvのsrcフォルダーに手動でコピーしました。次に、そのフォルダー内でpython setup.py installを実行しました。その後Djangoはこのモジュールをロードできませんでした。

次に、このアプリのソースとインストールフォルダーを削除し、pip install -r requirements.txtファイルに関連する行を追加した後、requirements.txtを使用してインストールしました。 srcフォルダーにダウンロードされ、インストールされ、すべてが正常に機能し始めました。これが誰かを助けることを願っています。

0

私の場合、register variableの代わりにtag variableを使用してライブラリインスタンスを作成しました

tag = template.Library()

しかし、それは

register = template.Library()

有効なタグライブラリであるためには、モジュールには、すべてのタグとフィルターが登録されているtemplate.Libraryインスタンスであるregisterというモジュールレベルの変数が含まれている必要があります。

0
dhana