所属するグループに応じてカスタムメニューが必要です。 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の一部です。私は何を間違えていますか?
my_templatetag.py
内にapp_name/templatetags
を配置することに加えて、テンプレートタグを変更するたびに、必ずDjango開発サーバーを再起動(または再起動)してください。サーバーが再起動しない場合、Djangoはタグを登録しません。
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',
}
},
},
]
次の手順のいずれかが欠落していないことを確認してください。
アプリケーションフォルダーにmodels.pyおよびviews.pyと同じレベルに「templatetags」というフォルダーを作成します
アプリケーションはsettings.pyのINSTALLED_APPSに含まれている必要があります
Templatetagsフォルダーには__init__.pyが必要です
Djangoサーバーを再起動します
「my_templatetag.py」はどこに保存されますか?アプリ内の「templatetags」というディレクトリに保存する必要があります。
ご覧ください: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ そうでない場合。
Djangoサーバーを再起動します。アプリ内のtemplatetagフォルダーとtemplatetagフォルダー内のtemplate_name.pyを設定した後、私にとってはうまくいきました。
私はこれが少し古いことを知っていますが、今日同じ問題に遭遇しました。ドキュメントで解決策を見つけました: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/
アプリには、models.py、views.pyなどと同じレベルにtemplatetagsディレクトリが含まれている必要があります。これが存在しない場合は作成してください。__init__.pyファイルを忘れないでください。 Pythonパッケージ。
__init__.pyを別の場所から新しいテンプレートタグのディレクトリにコピーするだけで、整理されます。
私の場合、問題は{% 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()
その後、サーバーを再起動できます。
(例templatetags/home.py)内に記述されたコードをhome.pyから切り取り/削除するだけで、コードを削除してサーバーを再起動し、再びhome.pyにコードを貼り付けることができます。
app_name/templatetags内にmy_templatetag.pyを配置し、app_name/templatetags内にinit。pyを作成します。その後、プロジェクトフォルダーでターミナルを開き、コマンドpython manage.py Shellを指定します
app_name.templatetagsからimport my_templatetag