当前位置: 首页 > 面试题库 >

Django-让中间件与视图/模板通信

楮杰
2023-03-14
问题内容

好的,这可能是一个很愚蠢的问题,但是我是Python /
Django的新手,所以我还不能真正了解它的作用域概念。现在,我正在编写一个中间件类来处理一些事情,并且我想设置“全局”变量,以便我的视图和模板可以访问。这样做的“正确”方法是什么?我考虑做这样的事情:

中间件

from django.conf import settings

class BeforeFilter(object):
    def process_request(self, request):
        settings.my_var = 'Hello World'
        return None

views.py

from django.conf import settings
from django.http import HttpResponse

def myview(request):
    return HttpResponse(settings.my_var)

尽管这可行,但是我不确定是这样做的“ Django方式”还是“ Python方式”。

因此,我的问题是:
1.这是正确的方法吗?
2.如果是正确的方法,那么从中间件添加可以在实际模板中使用的变量的正确方法是什么?假设我要评估某些内容,并且要headername在中间件中将变量设置为“我的网站名称”,并且希望能够{{ headername }}在所有模板中使用。按照我现在拥有的方式来做,我必须headername在每个视图中添加到上下文中。反正有绕过这个吗?我正在沿着CakePHP
$this->set('headername','My Site Name');
3的思路进行思考。我正在将中间件类用作CakePHP的等效类,该类beforeFilter在调用每个视图(或CakePHP中的控制器)之前运行。这是正确的方法吗?
4.完全无关,但这是一个小问题,将变量的内容输出到浏览器ala的一种好方法是print_r什么?说我想查看request传递到视图中的所有内容?是pprint答案吗?


问题答案:
  1. 这不是最好的方法。您可以在请求而不是设置上设置my_var。设置是全局的,并且适用于整个站点。您不想为每个请求修改它。多个请求同时更新/读取变量可能存在并发问题。

  2. 要在模板中访问request.my_var,可以执行 {{request.my_var}} 。要访问模板中的request变量,必须将 django.core.context_processors.request 添加到 TEMPLATE_CONTEXT_PROCESSORS 设置中。

  3. 是。描述请求中间件的其他术语是请求预处理器/过滤器/拦截器。

另外,如果您想在模板的标题中使用通用的站点名称,则可能要签出提供站点名称变量供您使用的Django站点应用程序。



 类似资料:
  • 我有Gammer模型,即用户扩展和竞争模型。很多用户可以参加一场比赛,而一场比赛可以有很多用户(很多) 插件管理。py: 管理员可以查看球员比赛(用户)或为他们分配能力 现在我希望玩家(用户)可以注册比赛(选择比赛)。我如何继续?

  • 问题内容: 这是一个相当基本的问题(我是Django的新手),但是在模板的视图中使用变量集时遇到了麻烦。如果我在视图内初始化字符串或列表(即h =“ hello”),然后尝试在模板内调用它: 既没有输出也没有错误。同样,如果我尝试在模板中使用不存在的变量: 再次没有错误报告。这正常吗?以及如何在模板中使用变量。谢谢! 问题答案: 为了能够访问模板中的变量,它必须位于用于渲染该模板的上下文中。我的猜

  • 模板引擎适合于动态 HTML 页面输出或者代码生成,在Web开发中是常见的 装备。 Blade内置了简单的模板引擎,为了应付网页渲染和简单的数据传输。在日常开发中, 我们通常使用一些优秀的、高效的、功能较为完善的模板引擎,诸如 Velocity、Freemarker、JetbrickTemplate 等等。 Blade支持扩展任意一款模板引擎,同时也有多个实现了,在 这里,也欢迎你贡献代码。 默认

  • CabalPHP的模板引擎是 league/plates,相关语法请参考 plates 的文档。 获取模板引擎 要使用 plates 请先修改 usr/boot.php,取消 Boot 类中的 use Cabal\Core\Http\Server\HasPlates 注释: class Boot extends Cabal\Core\Application\Boot { //...

  • 主要内容:静态网页,从数据库列表和显示数据在某些情况下编写视图代码,正如我们所看到前面工作真的很繁重。想象一下,只需要一个静态页面或列表页。 Django还提供了一种简单的方法来设置这些简单的视图被称为通用视图。 不同于传统的视图,一般的视图是一个类但没有函数。Django还提供了一组类 django.views.generic 通用视图,以及每一个普通视图是这些类或从它们中的一个类继承的。 有10+泛型类− 你可以使用通用视图。让我们来

  • 英文原文:http://emberjs.com/guides/views/inserting-views-in-templates/ 到目前为止,我们已经讨论了如何为单独的视图编写模板。然而,随着应用开发的深入,为了封装页面上的不同区域,你可能会经常需要创建一个层次化的视图结构。每个视图负责处理事件和维护需要显示的属性。 {{view}} 为了将一个子视图添加到父视图中,可以使用{{view}}助