我创建了一个简单的自定义上下文处理器,只需运行
每个请求一次。添加一些日志挂钩后,我发现它
每个请求被调用两次。
这是文档中遗漏的已知“功能”吗?
与继承树中模板的数量有关吗?
是1.03的bug吗?
这不是预期的行为。上下文处理器执行一次每次实例化 RequestContext 时 http://code.djangoproject.com/browser/django/trunk/django/template/context.py#L93)。在模板继承的情况下,相同的上下文实例被传递到父模板 http://code.djangoproject.com/browser/django/trunk/django/template/loader_tags.py#L97,因此这不会导致上下文处理器的另一次执行。您的日志记录具有误导性(请参阅@Vinay Sajip 的评论),或者您需要弄清楚代码中的哪个位置可能对每个请求执行额外的 RequestContext(您是否使用包含标签或其他一些呈现模板的自定义模板标签,并且实例化RequestContext?)
EDIT抱歉,“包含标签”是指(一般意义上)一些呈现另一个模板的标签,而不是任何使用clusion_tag 装饰器的标签。接受上下文的常规clusion_tag应该简单地传递现有的上下文对象,而不是实例化新的RequestContext。
您可以尝试的一件事是在上下文处理器中放置“import pdb; pdb.set_trace()”,在 Django 开发服务器中运行代码,并在每次上下文处理器命中时在控制台中使用 pdb 检查堆栈跟踪,查看它是从哪里调用的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)