【发布时间】: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