Django 1.10.1 'my_templatetag' is not a re

2020-02-08 05:06发布

I want a menu thats custom depending which group you are member of. Im using Django 1.10.1, allauth and so on. When im trying to make my templatetag it fails and it says:¨

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' looks like this:

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

and tha error comes in my .html file which say,

{%  load my_templatetag %}

I have tried to restart the server like millions of times, also i tried to change all the names, and the app is a part of INSTALLED_APPS in settings.py. What am I doing wrong?

11条回答
家丑人穷心不美
2楼-- · 2020-02-08 05:14

you just cut/remove your code which written inside the (example templatetags/home.py) from home.py you remove your code and restart your server and again paste your code in home.py it will work.

查看更多
仙女界的扛把子
3楼-- · 2020-02-08 05:16

put my_templatetag.py inside app_name/templatetags then create init.py inside app_name/templatetags .. Then open terminal in project folder give command python manage.py shell

from app_name.templatetags import my_templatetag

查看更多
家丑人穷心不美
4楼-- · 2020-02-08 05:16

In case it helps someone, the issue in my case was that I was using quotes when trying to load the tag(s)

{%  load 'my_templatetag' %}  <!-- incorrect -->

instead of

{%  load my_templatetag %}  <!-- correct -->

Note: extends needs quotes around the filename but not load

查看更多
ゆ 、 Hurt°
5楼-- · 2020-02-08 05:17

I know this is a bit old, but I ran into the same problem today. I found the solution in the docs: https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

The app should contain a templatetags directory, at the same level as models.py, views.py, etc. If this doesn’t already exist, create it - don’t forget the __init__.py file to ensure the directory is treated as a Python package.

Simply copying the __init__.py from another location into the new templatetag's directory sorted it out.

查看更多
Summer. ? 凉城
6楼-- · 2020-02-08 05:21

From django 1.9, you can load those new tags/filters in settings like this:

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

            }
    },
},

]

查看更多
Animai°情兽
7楼-- · 2020-02-08 05:21

Restart the django server. It worked for me after setting the templatetag folder within the app and template_name.py in the templatetag folder.

查看更多
登录 后发表回答