2016-11-18 18 views
13

あなたが所属するグループに応じてメニューをカスタマイズしたいのですが。 私はDjango 1.10.1、allauthなどを使用しています。 イムは私templatetagをしようとすると、それが失敗し、それが言う:¨Django 1.10.1 'my_templatetag'は登録されたタグライブラリではありません。

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() 

とthaの誤差は、言う私の.htmlファイルで提供されます

{% load my_templatetag %} 

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

答えて

23

app_name/templatetagsの中にmy_templatetag.pyを入れておくのではなく、テンプレートタグを変更するたびにDjango開発サーバーを再起動してください。サーバが再起動しないと、Djangoはタグを登録しません。ジャンゴ1.9から

11

、あなたがこのような設定では、これらの新しいタグ/フィルタをロードすることができます。

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', 

      } 
    }, 
}, 

]

+0

ありがとうございました:)他の方法で動作させることができませんでした。 – Jonathan

+0

ありがとう、それは私のために働いた! – RockOnGom

+0

それも私のために働いた。これは、実際には質問に対して選択された答えになる可能性があります。私はdjangoの2.0バージョンを使用しています。 – Doug

0

私は、これは少し古いですけど、私は今日、同じ問題に遭遇しました。ドン - https://docs.djangoproject.com/en/1.10/howto/custom-template-tags/

などmodels.py、views.py、これはまだ存在しない場合は、それを作成すると同じレベルで、templatetagsディレクトリが含まれている必要がありアプリ:私はドキュメントで解決策を見つけましたディレクトリがPythonパッケージとして扱われるように、__init__.pyファイルを忘れないでください。

別の場所から新しいtemplatetagのディレクトリに__init__.pyをコピーするだけで、それを並べ替えています。

1

djangoサーバを再起動してください。それは私のためにapp内のtemplatetagフォルダを設定し、templatetagフォルダ内のtemplate_name.pyを設定した後に働いた。

5

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

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

  2. あなたのアプリケーションはsettings.pyのINSTALLED_APPSになければなりません。

  3. templatetagsフォルダには__init__が必要です。PY

  4. 再起動APP_NAME/templatetags内部ジャンゴサーバ

+0

私のすべてのアプリケーションは、 'default_app_config = 'custom_admin.apps.Config''を含むためにapps.pyと__init__.pyを必要とするようです。さもなければ、Django 1.10はtemplatetagsをロードしていません。私はドキュメントで明示的にそれを表示しません。 – felix

0

プットmy_templatetag.pyそしてその後、プロジェクトフォルダ内の開放端子は、コマンドのpython manage.pyを与える.. APP_NAME/templatetags内のinitの.pyを作成app_name.templatetags輸入my_templatetagから

シェル

+0

inside templatetags folderクレート空白ファイル(名前は__init__.py) –

+0

詳細をすべて入力して読みやすくするには[回答を編集](https://stackoverflow.com/posts/47772135/edit)してください適切な場において)。 – Melebius

0

(例templatetags/home.py) あなたのコードを削除してサーバを再起動し、あなたのコードを再びhome.pyに貼り付けるだけで、コードを削除/削除できます。

関連する問題