【问题标题】:Errors loading multiple tags in Django在 Django 中加载多个标签时出错
【发布时间】:2014-10-14 01:46:10
【问题描述】:

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

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

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

一切正常。然后我决定,因为我只在基本页面中使用了所有这些标签,所以重构它们并将它们中的大部分包含在一个文件中,用单个加载语句替换混乱的加载,并清理一堆重复各种文件。

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标签有效。

低质量:

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)

服务器时间:

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

register.simple_tag(servertime)

您可以假设所有必需的导入都已就位,并且代码本身没有失败,因为我从它们是单个文件时复制了它们。

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

【问题讨论】:

    标签: python django django-templates


    【解决方案1】:

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

    很可能,当您将多个文件合并为一个时,您留下了几个寄存器的初始化:

    register = template.Library()
    

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

    【讨论】:

    • 不。我确保删除了多余的寄存器初始化。
    • Welp,我是正式的智障。在底部附近错过了一个偷偷摸摸的。非常感谢。有能力时会接受的。
    猜你喜欢
    • 2021-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-14
    • 1970-01-01
    相关资源
    最近更新 更多