web-dev-qa-db-ja.com

Django 1.10.1 'my_templatetag'は登録済みタグライブラリではありません。次のいずれかでなければなりません:

所属するグループに応じてカスタムメニューが必要です。 Django 1.10.1、allauthなどを使用しています。テンプレートタグを作成しようとすると失敗し、次のように表示されます:¨

TemplateSyntaxError at /
'my_templatetag' is not a registered tag library. Must be one of:
account
account_tags
admin_list
admin_modify
admin_static
admin_urls
cache
i18n
l10n
log
socialaccount
socialaccount_tags
static
staticfiles
tz

「my_templatetag.py」は次のようになります。

from Django import template
from Django.contrib.auth.models import Group


register = template.Library()

@register.filter(name='has_group')
def has_group(user, group_name):
    group =  Group.objects.get(name=group_name)
    return group in user.groups.all()

そして、エラーは私の.htmlファイルにあります。

{%  load my_templatetag %}

何百万回もサーバーを再起動しようとしましたが、すべての名前を変更しようとしましたが、アプリはsettings.pyのINSTALLED_APPSの一部です。私は何を間違えていますか?

51
Sliljedal

my_templatetag.py内にapp_name/templatetagsを配置することに加えて、テンプレートタグを変更するたびに、必ずDjango開発サーバーを再起動(または再起動)してください。サーバーが再起動しない場合、Djangoはタグを登録しません。

83
lmiguelvargasf

Django 1.9から、次のような設定でこれらの新しいタグ/フィルターをロードできます。

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',
            'app.apptemplates.load_setting',

        ],

        'libraries':{
            'my_templatetag': 'app.templatetags.my_templatetag',

            }
    },
},

]

49
Dat TT

次の手順のいずれかが欠落していないことを確認してください。

  1. アプリケーションフォルダーにmodels.pyおよびviews.pyと同じレベルに「templatetags」というフォルダーを作成します

  2. アプリケーションはsettings.pyのINSTALLED_APPSに含まれている必要があります

  3. Templatetagsフォルダーには__init__.pyが必要です

  4. Djangoサーバーを再起動します

22
Heapify

「my_templatetag.py」はどこに保存されますか?アプリ内の「templatetags」というディレクトリに保存する必要があります。

ご覧ください: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ そうでない場合。

3
zubhav

Djangoサーバーを再起動します。アプリ内のtemplatetagフォルダーとtemplatetagフォルダー内のtemplate_name.pyを設定した後、私にとってはうまくいきました。

3
Anish Ravula

私はこれが少し古いことを知っていますが、今日同じ問題に遭遇しました。ドキュメントで解決策を見つけました: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

アプリには、models.py、views.pyなどと同じレベルにtemplatetagsディレクトリが含まれている必要があります。これが存在しない場合は作成してください。__init__.pyファイルを忘れないでください。 Pythonパッケージ。

__init__.pyを別の場所から新しいテンプレートタグのディレクトリにコピーするだけで、整理されます。

1
Chris Shaw

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

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

その後、サーバーを再起動する必要がありました。

Django 1.11を使用していますが、同じ問題が発生していました。ここでの答えのいくつかは正しいですが、いくつかのことが欠けているかもしれません。ここに私がやったことがあります:

前のユーザーを引用する:

アプリケーションフォルダーにmodels.pyおよびviews.pyと同じレベルに「templatetags」というフォルダーを作成します

アプリケーションはsettings.pyのINSTALLED_APPSに含まれている必要があります

Templatetagsフォルダーにはinit。pyが必要です

ただし、Djangoサーバーを再起動する前に、タグを含むファイルにこれを追加します。

from Django import template
register = template.Library()

その後、サーバーを再起動できます。

0

(例templatetags/home.py)内に記述されたコードをhome.pyから切り取り/削除するだけで、コードを削除してサーバーを再起動し、再びhome.pyにコードを貼り付けることができます。

0
Rahul Verma

app_name/templatetags内にmy_templatetag.pyを配置し、app_name/templatetags内にinit。pyを作成します。その後、プロジェクトフォルダーでターミナルを開き、コマンドpython manage.py Shellを指定します

app_name.templatetagsからimport my_templatetag

0
Kiran Bachhav.