【发布时间】:2015-03-04 00:29:40
【问题描述】:
我想知道从请求会话中获取数据是一个坏主意,还是将数据解析到 dict 上下文并呈现它更好(需要为每个视图执行此操作)?
【问题讨论】:
我想知道从请求会话中获取数据是一个坏主意,还是将数据解析到 dict 上下文并呈现它更好(需要为每个视图执行此操作)?
【问题讨论】:
通常的做法是通过视图中的上下文发送您需要的内容。
我觉得它为您正在做的事情提供了更多的安全性/确定性,因为您可以将您的逻辑保持在应有的位置,而不是在模板中对请求中的内容进行任何检查。
编辑
仅当您希望很少做某事时,上述情况才适用。如果您经常将请求的元素添加到您的模板中,那么您确实应该像其他人所建议的那样编写上下文处理器以使您需要的内容可用于所有视图。 看看文档; TEMPLATE_CONTEXT_PROCESSORS
还可以阅读 django 书的这一章,因为它会很有帮助; Chapter 9: Advanced Templates
特别是本节;
编写自己的上下文处理器的指南
以下是一些关于自己滚动的提示:
让每个上下文处理器负责尽可能小的功能子集。使用多个处理器很容易,因此您不妨将功能拆分为逻辑部分以供将来重用。
请记住,TEMPLATE_CONTEXT_PROCESSORS 中的任何上下文处理器都将在由该设置文件提供支持的每个模板中都可用,因此请尝试选择不太可能与您的模板可能使用的变量名冲突的变量名独立。由于变量名区分大小写,因此对处理器提供的变量使用全部大写字母并不是一个坏主意。
它们位于文件系统的哪个位置并不重要,只要它们在您的 Python 路径上,您就可以从 TEMPLATE_CONTEXT_PROCESSORS 设置中指向它们。话虽如此,约定是将它们保存在您的应用或项目中名为 context_processors.py 的文件中。
【讨论】:
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/
【讨论】:
如果您经常访问模板中的请求对象(就像我对 URL 获取参数处理所做的那样),您可以将其添加到您的 TEMPLATE_CONTEXT_PROCESSORS 中。
"django.core.context_processors.request",
【讨论】:
django.template.context_processors.request,而不是 django.core.context_processors.request,它是在列表中设置的 TEMPLATES['OPTIONS']['context_processors'],而不是 TEMPLATE_CONTEXT_PROCESSORS。 github.com/django/django/blob/stable/1.9.x/django/template/…