在我的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)
您可以假设所有必需的导入都已到位且代码本身没有失败,因为我将它们作为单个文件进行复制。
发生了什么?为什么我不能从单个文件中调用各种标签,而从多个文件调用它们可以正常工作?上下文的要求似乎是关键问题,但我不明白为什么。
答案 0 :(得分:2)
您在此处发布的代码完全有效。问题必定在其他地方。
最有可能的是,当你将几个文件合并为一个时,你留下了几个寄存器的初始化:
register = template.Library()
然后你的lowqolcs
标签正在第一个寄存器中注册,后来被另一个寄存器覆盖。