我认为你不应该把应用程序的逻辑和模板(MVC模式中的视图)混在一起。这破坏了体系结构的一致性。你可以打电话
get_messages
在需要它的视图中
messages
到模板上下文中,在其他只是传递
None
.
但是回答你的问题:你可以做一个代理对象。例如:
class Proxy(object):
def __init__(self, request)
self.request = request
super(Proxy, self).__init__()
def get_messages(self):
# so some expensive things
return 'string'
# context processor
def context_processor(request):
return {'messages':Proxy(request)}
# in the view
{{ messages.get_messages }}
get
),并在构造函数中接受一个参数:一个将请求对象作为第一个参数的函数。这样您就获得了在模板中代理函数调用的泛型方法。在这里:
class Proxy(object):
def __init__(self, request, function)
self.request = request
self.function = function
super(Proxy, self).__init__()
def get(self):
return self.function(self.request)
你可以写得比我以前写得更酷:
# context processor
def context_processor(request):
return {'messages':Proxy(request, get_messages)}
# sounds nice to me
{{ messages.get }}