私は小さなDjango友人から受け取ったプロジェクトを持っています。コードは彼のシステムで完全に動作します。しかし、私のシステムでは、サーバーを実行すると次のエラーメッセージが表示されます。
/でのTemplateSyntaxError
'current_tags'は有効なタグライブラリではありません:テンプレートライブラリcurrent_tagsが見つかりません、Django.templatetags.current_tagsを試しました
問題は、htmlファイルの行にあります。
{% load current_tags %}
このまったく同じコードは、彼のシステムでエラーなしで機能します。それは何でしょうか?
次のことをお勧めします。
(ほとんどの場合)タグライブラリの依存関係のいずれかをインストールしていません。 current_tags.py
モジュール内のインポートを確認します。
タグライブラリを含むアプリケーションがsettings.py
の下のINSTALLED_APPS
に登録されていることを確認してください。
タグライブラリを正常にインポートできることを確認してください。
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/
この問題が発生したため、appname/templatetags /ディレクトリに空の___init__.py
_ファイルを追加して修正しました。
可能性はたくさんあります:
サーバーの再起動で問題が解決しました。ドキュメントで言及しているに違いありません。
次の構造があると仮定します。
- アプリケーション名
------- 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がすべて機能しなかった場合、それらをすべて削除してから再試行する必要があります
私は同じエラーを受け取っていましたが、別の理由であなたに伝えます(他の誰かが同じ問題を抱えている場合)。
私はすべてが正しかったのですが、template_tags
という名前のフォルダー内にカスタムタグがあり、長い検索の後、templatetags
である必要があることがわかりました。 フォルダ名が正確にtemplatetags
であることを確認してください。
「カスタムタグ」は有効なタグライブラリエラーではありません。カスタムタグがアプリにロードされていないため、より頻繁に発生します。
空のinit。pyを「カスタムテンプレートタグ」が配置されている同じフォルダ内に配置し、ターミナルで以下のコードを実行してカスタムテンプレートタグをロードします
touch __init__.py
これに直面している他の人のために。アプリ名が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)
上記の手順をすべて確認すると、問題が見つかる場合があります。
私にとっては、load
タグのライブラリ名を引用符で囲むのは間違いでした。
違う: {% load 'library_name' %}
正しい:{% load library_name %}
他の回答も参照してください。ここに着陸する前に、これらの問題もいくつか解決しました。
Templatetagsフォルダーがpythonで初期化されていることを確認してください。疑わしい場合は、すべてのファイルをbakupしてください。
すべてのファイルを削除し、templatetagsフォルダー内でinit。pyファイルのみを作成し、サーバーを再起動します。
これでフォルダーはPythonの下に置かれました。
これは私のために働く...
load
ステートメントが正しいことを確認してください。アプリの名前ではなく、ファイルの名前にする必要があります。たとえば、このアプリがある場合:
appname
├── __init__.py
├── templatetags
│ ├── __init__.py
│ └── foobarfilename.py
次に、テンプレートにこれを配置する必要があります。
{% load foobarfilename %}
もちろん、他の回答も確認する必要があります。
テンプレートタグを作成し、settings.INSTALLED_APPSにインストールされたアプリ内の「templatetags」パッケージ内にあるはずです。dev-serverを再起動してください。
たぶん誰かがこれを便利だと思うでしょう:どういうわけか私はディレクトリに名前を付けていた'templatetags '
の代わりに 'templatetags'
、つまり-末尾にスペースがあります。最終的に実現するために何時間もかかった。
私の場合はそうでした-私は使用しています
@register.inclusion_tag('template-to-use.html')
そのテンプレートを作成するのを忘れてすぐに動作し始めました。上記の答えはほとんどの問題に関連していることは知っていますが、誰かが役に立つと思うかもしれません。それは私に届いたはずです:
Template does not exist
しかし、そうではなく、これは機能しました。
私の場合、問題は{% load filter_method_name %}
を使用していました
{% filename %}
に変更する必要がありました
ここにリストされているアドバイスはすべて私を助けませんでした。私の特定のケースでは、サードパーティのアプリからテンプレートタグをロードする必要があるという問題があり、そのアプリのソースフォルダーをvirtualenvのsrc
フォルダーに手動でコピーしました。次に、そのフォルダー内でpython setup.py install
を実行しました。その後Djangoはこのモジュールをロードできませんでした。
次に、このアプリのソースとインストールフォルダーを削除し、pip install -r requirements.txt
ファイルに関連する行を追加した後、requirements.txt
を使用してインストールしました。 src
フォルダーにダウンロードされ、インストールされ、すべてが正常に機能し始めました。これが誰かを助けることを願っています。
私の場合、register variableの代わりにtag variableを使用してライブラリインスタンスを作成しました
tag = template.Library()
しかし、それは
register = template.Library()
有効なタグライブラリであるためには、モジュールには、すべてのタグとフィルターが登録されているtemplate.Libraryインスタンスであるregisterというモジュールレベルの変数が含まれている必要があります。