Python Django自定义模板标签register.assignment_tag不起作用

时间:2014-01-09 13:32:28

标签: python django django-templates

这是我的Python Django自定义模板标记代码

from django import template
from ipc.declarations.models import MainDeclaration
from django.shortcuts import get_object_or_404

register = template.Library()


def section_settings(declarationId,user):
    declaration = get_object_or_404(MainDeclaration, pk=declarationId, user=user)
    businessInfo = declaration.GetOrCreateBusinessInfo()
    sections = declaration.GetSections()

    return sections

register.assignment_tag(section_settings)

现在我收到错误

register.assignment_tag(section_settings) [Thu Jan 09 06:50:44 2014] [error] [client 127.0.0.1] AttributeError: 'Library' object has no attribute 'assignment_tag'

这适用于我的开发服务器应用程序,但在生产服务器中上传相同代码时无效。

请指导我。

3 个答案:

答案 0 :(得分:26)

尽管这个问题已经存在了几年,但最近人们可能会再次看到这个错误,但出于不同的原因。再次出现错误:

AttributeError: 'Library' object has no attribute 'assignment_tag'

升级到Django 2.0后,您可能会看到此错误。这是因为assignment_tag was deprecated in Django 1.9,并在Django 2.0中被删除:

  

Django 1.4添加了assignment_tag帮助程序,以便于创建将结果存储在模板变量中的模板标记。 simple_tag()助手已经获得了同样的能力,使assignment_tag过时了。使用assignment_tag的标记应更新为使用simple_tag

请注意,simple_tag的行为与Django 1.8中的assignment_tag相似但不相同。

答案 1 :(得分:1)

在软件包social_widgets,Python 3.7和Django 2.2中也遇到了同样的错误。将social_widgets.py中的assignment_tag更改为simple_tag可以为我解决问题。

答案 2 :(得分:0)

在升级到Django 2时就遇到了这个问题。问题在django-debug-toolbar中出现,但实际上已通过将django-webpack-loader更新到最新版本而得到纠正。