在Django中加载多个标记的错误

时间:2014-08-20 15:50:25

标签: python django django-templates

在我的base.html中,我有很多自定义简单标记,可以输出服务器时间等内容,以及网站侧边栏上的各种变量。最初我将这些标签放在单独的文件中:

templatetags
  policieschoice.py
  quantities.py
  servertime.py
  randomquote.py
  lowqolcs.py

我的{% load [x] %}顶部有一堆base.html条。

一切都很好。然后我决定,因为我只在基页中使用所有这些标记,重构它们并将它们中的大部分包含在一个文件中,用一个load语句替换乱码,并清理掉一堆重复各种文件。

templatetags
  basetags.py

然后我计划用{% load basetags %}加载所有内容。

令我惊讶的是,事情停止了。我确保删除重复的导入等,但我仍然收到错误。问题似乎来自我需要接受上下文的大多数标签,如下所述。

如果我使用{% load basetags %},则页面失败并显示错误Invalid block tag: 'lowqolcs'。这是有道理的,因为lowqolcs是第一个标签。

如果我尝试{% load lowqolcs from basetags %},则错误为'lowqolcs' is not a valid tag or filter in tag library 'basetags'

现在,lowqolcs需要上下文才能工作,所以我尝试了{%load servertime from basetags%}。该错误再次Invalid block tag: 'lowqolcs',暗示servertime标记有效。

lowqolcs:

def lowqolcs(context):

    request = context['request']
    try:
        world = World.objects.get(worldid=request.user.id)
    except:
        return ''

    if world.qol < -80:
        toreturn = '<style>body {font-family: "Comic Sans MS", cursive, sans-serif;}</style>'
    else:
        toreturn = ''

    return mark_safe(toreturn)

register.simple_tag(lowqolcs, takes_context=True)

servertime:

def servertime():
    return v.now().strftime('%H:%M:%S')

register.simple_tag(servertime)

您可以假设所有必需的导入都已到位且代码本身没有失败,因为我将它们作为单个文件进行复制。

发生了什么?为什么我不能从单个文件中调用各种标签,而从多个文件调用它们可以正常工作?上下文的要求似乎是关键问题,但我不明白为什么。

1 个答案:

答案 0 :(得分:2)

您在此处发布的代码完全有效。问题必定在其他地方。

最有可能的是,当你将几个文件合并为一个时,你留下了几个寄存器的初始化:

register = template.Library()

然后你的lowqolcs标签正在第一个寄存器中注册,后来被另一个寄存器覆盖。