我创建了一个模板上下文处理器,用于在每个页面上查询数据库以查找任何全局通知。我正在使用SimpleLazyObject
向模板提供结果,这是必要的,因为所讨论的函数最终取决于来自不同模板上下文处理器的另一个SimpleLazyObject
。这是功能:
def company_notifications(request):
def get_notifications():
from app.services.companies import CompanyNotificationService
notifications = CompanyNotificationService().company_notifications(request.profile.company)
return notifications
return {
'notifications': SimpleLazyObject(get_notifications),
}
当我尝试循环模板中的notifications
变量(即for notification in notifications
)时,出现以下错误:
类型为'SimpleLazyObject'的/ staff / notifications对象的TypeError 没有len()
如果我只是尝试使用{{ notifications }}
将变量打印到模板,我会得到我期望的结果:
[<CompanyNotification: 57>, <CompanyNotification: 55>, <CompanyNotification: 59>]
但如果我尝试打印其中一个对象的属性,即{{ notifications[0].headline }}
,我会收到一个新错误:
/ staff / notifications上的TemplateSyntaxError 无法解析余数:'[0] .headline'来自'notifications [0] .headline'
如何在模板中访问此变量?
答案 0 :(得分:0)
@Alasdair的评论是正确的。这是Django中的一个错误&lt; 1.7。我的hacky解决方案是继承SimpleLazyObject:
class SimpleLazyObjectFix(SimpleLazyObject):
def __len__(self, *args, **kwargs):
return 1