每次向我的应用程序发出请求时,我都会使用中间件来检索并存储具有与特定页面相关的信息的“页面”对象。我存储请求对象这个对象的引用,这里有一个例子:模板标记和请求对象
class PageMiddleware(object):
def process_request(self, request):
if not hasattr(request, 'page'):
request.page = Page.objects.get(slug=<slug>)
return None
它的工作原理不够好,但我想在一个模板标签访问该对象。模板标签只能引用'context'思想,这意味着我无法看到我的Page对象。
我知道我可以使用自定义上下文处理器为此,但这意味着进一步修改设置文件,我想尽量保持此应用程序尽可能封装。例如,我注意到,调试工具栏应用程序管理将数据附加到模板上下文而无需修改TEMPLATE_CONTEXT_PROCESSORS。
简而言之,我想通过仅使用中间件来访问模板标记中的页面对象。有任何想法吗?
编辑:我使用的是标准的模板标签,下面的类:
class GetPageContentNode(Node):
def __init__(self, key):
self.key = key
def render(self, context):
return context['request'].page
感谢您的答复。我应该在我的原文中说过我使用的是标准标签而不是包含标签。调用上下文['请求']导致键错误。 – Hanpan
它也应该在普通模板标签上工作。包含&简单模板标签只是普通模板标签的包装器 –