Django 1.10.1'my_templatetag'不是注册的标签库。必须是以下之一:

时间:2016-11-18 21:28:18

标签: django django-allauth templatetags

我想要一个自定义的菜单,具体取决于您所属的群组。 我使用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的一部分。 我做错了什么?

16 个答案:

答案 0 :(得分:74)

除了将my_templatetag.py放在app_name/templatetags之外,每次修改模板标记时,请确保重新启动Django开发服务器(或确保它自己重新启动)。如果服务器没有重启,Django就不会注册标签。

答案 1 :(得分:42)

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

            }
    },
},

答案 2 :(得分:21)

确保您没有错过以下任何步骤:

  1. 创建一个名为" templatetags"的文件夹。与models.py处于同一级别 和应用程序文件夹中的views.py

  2. 您的应用必须位于settings.py中的INSTALLED_APPS

  3. templatetags文件夹必须包含__init __。py

  4. 重新启动django服务器

答案 3 :(得分:3)

'my_templatetag.py'存储在哪里?它应存储在app中的名为“templatetags”的目录中。

请参阅:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/ 如果不是这样的话。

答案 4 :(得分:3)

重新启动django服务器。在app中设置templatetag文件夹并在templatetag文件夹中设置template_name.py后,它对我有用。

答案 5 :(得分:3)

您必须手动停止开发服务器并重新启动它, 这样Django可以识别新的模板标签

答案 6 :(得分:1)

我的问题是,我在使用{% load filter_method_name %}

我不得不更改为{% load filename %}

然后我必须重新启动服务器。

答案 7 :(得分:1)

我通过在根目录中添加一个 templatestag 文件夹和一个定义过滤器的 filter.py 文件解决了这个问题,然后我调整了我的 settings.py.

请查看我在 this similar thread

中关于此问题的完整答案

答案 8 :(得分:0)

我知道这有点旧,但我今天遇到了同样的问题。我在文档中找到了解决方案:https://docs.djangoproject.com/en/dev/howto/custom-template-tags/

  

应用程序应该包含templatetags目录,与models.py,views.py等处于同一级别。如果这不存在,请创建它 - 不要忘记__init__.py文件以确保目录被视为Python包。

只需将__init__.py从其他位置复制到新模板标签的目录中即可将其整理出来。

答案 9 :(得分:0)

将my_templatetag.py放在app_name / templatetags中,然后在app_name / templatetags中创建 init .py。然后打开项目文件夹中的终端,发出命令python manage.py shell

  
    来自app_name.templatetags的

导入my_templatetag

  

答案 10 :(得分:0)

你只需剪切/删除你写的代码(例如templatetags / home.py) 从home.py中删除代码并重新启动服务器,再次将代码粘贴到home.py中即可。

答案 11 :(得分:0)

我正在使用Django 1.11,但遇到了同样的问题。这里的一些答案是正确的,但有些事情可能会丢失。这是我所做的:

引用上一个用户:

  

在与models.py相同的级别上创建一个名为“ templatetags”的文件夹   和您的应用程序文件夹中的views.py

     

您的应用程序必须位于settings.py中的INSTALLED_APPS中

     

templatetags文件夹必须具有 init .py

但是,在重新启动Django服务器之前,请将其添加到包含标签的文件中:

from django import template
register = template.Library()

然后您可以重新启动服务器。

答案 12 :(得分:0)

如果对某人有帮助,我的问题是我在尝试加载代码时使用了引号

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

代替

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

注意:extends需要在文件名两边加上引号,但load不需要

答案 13 :(得分:0)

是的,由于较旧的django版本或复杂地编写“折旧”,您当前面临的问题

如果模板/ HTML文件中包含这些类型的TAg,请使用它们进行更改。.

Symbol

更改


> {{% load staticfiles %} or  {% load admin_static %}, {% load
> admin_static %}}

到达终点。 只需执行这些操作,即可从YOur BAse.html /或任何类型的HTML中替换所有这些

答案 14 :(得分:0)

templatetags 文件夹必须有一个 __init__.py 文件才能成为 regular python package

确保您还在 __init__.py 文件旁边创建了 templatetags.py 文件

答案 15 :(得分:-1)

首先停止服务器。从templatetags / tag.py中删除/剪切代码,然后重写/粘贴它,然后运行服务器。它对我有用