我想知道从请求会话中获取数据是不是一个坏主意,或者将数据解析为dict上下文并呈现它(需要为每个视图执行它)更好吗?
答案 0 :(得分:2)
如果您经常访问模板中的请求对象,则可以将其添加到TEMPLATE_CONTEXT_PROCESSORS(就像我为URL获取参数处理所做的那样)。
"django.core.context_processors.request",
答案 1 :(得分:1)
通常的做法是通过视图中的上下文发送您需要的内容。
我觉得它可以让你在你正在做的事情上有更多的安全性/确定性,因为你可以将逻辑放在视图中,而不是在模板中对请求中的事物进行任何检查。 / p>
修改的
如果您想要做很少的事情,上述情况才会出现。如果您经常向模板添加请求元素,那么您应该像其他人一样建议编写上下文处理器,以便为所有视图提供所需的内容。 看看文档; TEMPLATE_CONTEXT_PROCESSORS
同时阅读django书的这一章,因为它会非常有用; Chapter 9: Advanced Templates
特别是本节;
编写自己的上下文处理器指南
以下是一些推荐自己的提示:
使每个上下文处理器负责最小的功能子集。使用多个处理器很容易,因此您可以将功能拆分为逻辑部分,以便将来重用。
请记住,TEMPLATE_CONTEXT_PROCESSORS中的任何上下文处理器都将在该设置文件支持的每个模板中,因此请尝试选择不太可能与变量名称冲突的变量名称模板可能是独立使用。由于变量名称区分大小写,因此对处理器提供的变量使用全部大写并不是一个坏主意。
它们所在的文件系统在哪里并不重要,只要它们位于您的Python路径上,以便您可以从TEMPLATE_CONTEXT_PROCESSORS设置指向它们。话虽如此,惯例是将它们保存在应用程序或项目中名为context_processors.py的文件中。
答案 2 :(得分:0)
Django为您提供了一种将数据放入每个模板的方法,它被称为上下文处理器。
http://www.b-list.org/weblog/2006/jun/14/django-tips-template-context-processors/ https://docs.djangoproject.com/en/1.7/ref/templates/api/