【问题标题】:Get data from request in template django从模板django中的请求中获取数据
【发布时间】:2015-03-04 00:29:40
【问题描述】:

我想知道从请求会话中获取数据是一个坏主意,还是将数据解析到 dict 上下文并呈现它更好(需要为每个视图执行此操作)?

【问题讨论】:

    标签: django templates request


    【解决方案1】:

    通常的做法是通过视图中的上下文发送您需要的内容。

    我觉得它为您正在做的事情提供了更多的安全性/确定性,因为您可以将您的逻辑保持在应有的位置,而不是在模板中对请求中的内容进行任何检查。

    编辑

    仅当您希望很少做某事时,上述情况才适用。如果您经常将请求的元素添加到您的模板中,那么您确实应该像其他人所建议的那样编写上下文处理器以使您需要的内容可用于所有视图。 看看文档; TEMPLATE_CONTEXT_PROCESSORS

    还可以阅读 django 书的这一章,因为它会很有帮助; Chapter 9: Advanced Templates

    特别是本节;

    编写自己的上下文处理器的指南

    以下是一些关于自己滚动的提示:

    • 让每个上下文处理器负责尽可能小的功能子集。使用多个处理器很容易,因此您不妨将功能拆分为逻辑部分以供将来重用。

    • 请记住,TEMPLATE_CONTEXT_PROCESSORS 中的任何上下文处理器都将在由该设置文件提供支持的每个模板中都可用,因此请尝试选择不太可能与您的模板可能使用的变量名冲突的变量名独立。由于变量名区分大小写,因此对处理器提供的变量使用全部大写字母并不是一个坏主意。

    • 它们位于文件系统的哪个位置并不重要,只要它们在您的 Python 路径上,您就可以从 TEMPLATE_CONTEXT_PROCESSORS 设置中指向它们。话虽如此,约定是将它们保存在您的应用或项目中名为 context_processors.py 的文件中。

    【讨论】:

    • 我不同意;因为您最终可能会通过一个非常大的字典,这只会使您的观点混乱;特别是如果您需要许多视图中的值。当我发现自己在多个视图中重用一个变量时,我通常会构建一个过滤器/标签或将其放入上下文处理器中
    • @warath-coder 是的,考虑到上下文处理器的说法,我现在不同意自己的观点。我正在采取一个简单的答案,认为 1 或 2 个视图可能需要部分请求。我会更新我的答案。
    【解决方案2】:

    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/

    【讨论】:

      【解决方案3】:

      如果您经常访问模板中的请求对象(就像我对 URL 获取参数处理所做的那样),您可以将其添加到您的 TEMPLATE_CONTEXT_PROCESSORS 中。

      "django.core.context_processors.request",

      【讨论】:

      • 从 Django 1.8 和 1.9 开始,它是 django.template.context_processors.request,而不是 django.core.context_processors.request,它是在列表中设置的 TEMPLATES['OPTIONS']['context_processors'],而不是 TEMPLATE_CONTEXT_PROCESSORSgithub.com/django/django/blob/stable/1.9.x/django/template/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-03-09
      • 2010-10-16
      • 2010-10-16
      • 2016-06-28
      相关资源
      最近更新 更多