2014-03-28 56 views
0

我有一个名为message_base的基础模板,它扩展了主基础模板,我需要在message_base中显示一个动态菜单...现在我知道我可以使用模板上下文处理器,但我想知道是否有任何方法可以限制数据只能从message_base及其子页面访问,而不是整个应用程序,因为我认为在每个请求中向所有页面发送数据是不必要的。Django动态嵌套模板

感谢

回答

0

发送数据到所有页面不仅是不必要的;这是危险的。最终的情况看起来很像如果你在任何地方使用全局变量会发生什么情况。

我不确定是否有更好的方法来做你想做的事情,所以我只是想告诉你我们做了什么。

不是扩展base_template,而是在那里添加一个上下文变量,比如{{ message_area }}。然后,我将在message_base模板上将该上下文变量设置为render()的输出。例如:

base_template.render(Context({..., 'message_area': message_base.render(...)})) 

这使得只有message_base应该与本地化到message_base有关的数据保留。

+0

有趣的解决方案,我会尝试一下,谢谢 – user3474181

0

message_base不是一个单独的页面。它是由Django的模板引擎提供的一个页面的一部分。 message_base延伸base模板,这意味着它是使用父模板base和子模板message_base构建的同一页的一部分。您的数据已经可用于整个应用程序。一旦模板被渲染,只有HTML被发送回浏览器。并不是每个请求都会发回数据,然后模板会在浏览器端呈现。

+0

是的,但如果我设置了模板上下文处理器,数据将与每个请求一起发送,即使请求的页面没有利用日期...就像验证用户信息(用户对象) – user3474181

+0

Umm号如果上下文变量不在模板中使用,没有任何内容会被发送回浏览器。浏览器只关心HTML。您的模板将由Django使用上下文变量呈现,HTML将被生成并发回。而已。如果您不使用模板中的上下文变量,则不会将其发送回浏览器。 –