Django标签库注册无效

11

我尝试在Django中注册我的自定义模板标签库,但是不幸地它没有起作用!

我想创建一个自定义的include标签,并遵循以下说明:https://docs.djangoproject.com/en/1.11/howto/custom-template-tags/#howto-custom-template-tags-inclusion-tags

我创建了一个名为'tag_lib'的应用程序(已在settings.py中安装),以放置我的模板标签。在应用程序文件夹中有一个名为'templatetags'的字典,其中包含一个空的__init__.py和我的my_tags.py

my_tags.py 包含:

from django import template


register = template.Library()


@register.inclusion_tag(filename='navbar.html', takes_context=True)
def navbar_context(context):
    return {
        'some_var': context['some_var'],
    }

当我重新启动我的开发服务器并尝试加载库时

{% load my_tags %} `

在模板中,我遇到了错误:

`

`
TemplateSyntaxError at /

'my_tags' is not a registered tag library. Must be one of:
admin_list
admin_modify
admin_static
admin_urls
cache
i18n
l10n
log
static
staticfiles
tz

有什么想法,我在哪里犯了错误吗?

谢谢。


3
该应用程序必须在您的设置.INSTALLED_APPS中。 - bruno desthuilliers
您的错误信息包含了 my_tag,而您的“{% load my_tags %}”中有 s 在 tag 的末尾。请注意是否已在所需的位置添加/删除? - HenryM
谢谢,那是我问题中的一个拼写错误,我已经编辑过了。不幸的是,我在我的代码中也犯了同样的错误 :| - fredo.r
尝试将您的 templatetags 目录移出 tag_lib 并移到您的“主应用程序”(无论它叫什么)目录中。这样可以让您知道是否有问题是由于您设置 tag_lib 的方式不正确导致的。 - HenryM
好的,你能启动一个 Django shell 并导入你的 my_tags 模块吗?使用命令 ./manage.py shell,然后输入 from tag_lib.templatetags import my_tags。可能是因为某些原因(如语法错误等),你的模块会触发 ImportError 错误... - bruno desthuilliers
显示剩余5条评论
5个回答

21

我也遇到过这个问题。我的做法是停止服务器的运行,再重新启动它。似乎在运行服务器时Django不会初始化标签(或资源)。希望能对你有所帮助。


9

2

提醒一下,在Windows下使用django时,至少有两种情况需要重新启动开发服务器(python.exe manage.py runserver):

  • 在应用程序中创建新的模板标签
  • 修改'app/static/app/'文件夹中的静态文件

希望这可以帮到您。


1
我遇到了同样的问题,但重新加载服务器并不能解决。因此我通过以下方法解决:
在项目/setting.py文件中,我在TEMPLATE下注册了库:
TEMPLATES = [
{
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
    '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',
        ],
        'libraries': {
            'my_tags': 'app.templatetags.blog_tags',
        }
    },
},

服务器自行重启。


这对我有用...使用Django v3.2.16 - Baraa Al-jabali

0
在Django 3.1中,我将我的py文件放置在我的应用程序中的templatetags文件夹中来解决它。正如文档所说。自定义模板标签。 该py文件必须具有register = template.Library()。

myapp/templatetags/mytags.py

在设置中,我在INSTALLED_APPS数组中有我的应用程序。
然后,在我的模板文件中。
{% load mytags %}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接