为什么我必须在所有响应中传递 RequestContext?

2023-11-22

我想在导航菜单中突出显示当前页面。显然,当您在菜单链接的页面上时,我需要为菜单链接提供一个类似“活动”的类。这是一个经典问题,我见过很多解决方案proposed。我的问题是我讨厌他们所有人,并且认为他们都不是很干。例如:

@register.simple_tag
def active(request, pattern):
    import re
    if re.search(pattern, request.path):
        return 'active'
    return ''

----

{% load tags %}
<div id="navigation">
    <a class="{% active request "^/about/" %}" href="/about/">About</a>
    <a class="{% active request "^/contact/" %}" href="/contact/">Contact</a>
    <a class="{% active request "^/services/" %}" href="/services/">Services</a>
</div>

该标记接受您当前的请求和 URL 表达式,如果您当前位于此页面,则返回“活动”。或者,这可以使用命名视图而不是 url 来完成,但原理是相同的。

我的主要问题是,我的导航将在 99% 的视图上调用,但是,为了获取当前的请求变量,我仍然需要将 RequestContext 解析为模板,如下所示:

def contact(request):
    # snip ...
    return render_to_response(
                'contact.html',
                { 'myvar' : myvar },
                context_instance=RequestContext(request))

为什么我需要将此 context_instance 行添加到我的每一个视图中,而可能除了其中一个视图之外的所有视图中needsrequest 变量以便获取当前 url/视图以突出显示活动链接?这看起来非常潮湿,尤其是对于大多数 django 站点中必须存在的功能而言。我希望默认情况下包含该请求,并且能够选择抑制它。我找不到在中间件中执行此操作的方法,因为我无法在视图返回模板后渲染模板之前拦截模板。

有什么建议么?


你的意图是有道理的,你需要RequestContext大多数情况下,出于性能原因,只有极少数情况下可以安全地省略它。解决方案很简单,而不是render_to_response use direct_to_template捷径:

from django.views.generic.simple import direct_to_template

def contact(request):
    # snip ...
    return direct_to_template(request, 'contact.html', { 'myvar' : myvar })

... or render_to装饰器来自django-烦人的:

from annoying.decorators import render_to

@render_to('template.html')
def foo(request):          
    bar = Bar.object.all()  
    return {'bar': bar}     
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我必须在所有响应中传递 RequestContext? 的相关文章

随机推荐

  • 将 API 函数包装在 RxJs Observable 中

    我是 RxJs 的新手 我有一个用于地理编码的 API 它提供了如下所示的功能 simpleGeocode options where options address addr success Function failure Functi
  • ro.sf.lcd_密度必须定义为构建属性

    在模拟器上运行应用程序时 我遇到了这些错误 我该如何解决这个问题才能使我的程序更加可靠 error 01 16 11 06 49 211 E SurfaceFlinger 37 ro sf lcd density must be defin
  • 用C处理音频wav文件

    我正在处理 wav 文件的幅度并按某个小数因子缩放它 我正在努力思考如何以节省内存的方式读取和重写文件 同时也尝试解决该语言的细微差别 我是 C 语言的新手 该文件可以是 8 位或 16 位格式 我想到这样做的方法是首先阅读标头数据到一些预
  • 为什么要缓存 jQuery 对象?

    那么为什么我们要缓存 jQuery 对象呢 在以下场景中 var foo bar foo attr style cool foo attr width 123 bar attr style cool bar attr width 123 为
  • 使用 Git 创建更改文件的存档

    我正在寻找一个简单的解决方案来存档最近更改的文件 我得到这个简单的命令google git archive o update zip HEAD git diff name only HEAD 当我在 GIT BASH 中运行它时 它一直说致
  • 如何编写 ANSI C 控制台屏幕缓冲区?

    我正在制作一个基于 ASCII 的游戏 到处都有人说要使用 MSDN 中的 Console Write 如果你使用的是 Windows 那就太棒了 但我没有 因此 我尝试用 C 语言编写一个函数或一组函数 可以在两个屏幕缓冲区之间交替 并将
  • NameValuePair 在 API 22 中已弃用

    现在 namevaluepair 在 API 22 中已被弃用 如果我想实现 namevaluepair 接口 我该怎么办 下面是我的代码 package com example passpass import org apache htt
  • Python csv:UnicodeDecodeError

    我正在用Python读取一个文件csv模块 并且还有另一个编码问题 抱歉 这里有太多问题 在 CSV 文件中 有 符号 读入该行并打印后 它们已变为 xa3 尝试将它们编码为 Unicode 会产生UnicodeDecodeError ro
  • h5py,访问SVHN中Datasets中的数据

    我想读书街景门牌号 SVHN 数据集通过使用h5py In 117 def printname name print name In 118 data digitStruct visit printname bbox name 数据中有两组
  • 检测与 Maven 的依赖冲突

    我有一个 Maven 构建的 Java 应用程序 它引入了许多库 该应用程序位于一个 git 存储库中 具有其自己的 Maven 构建 每个库位于其自己的 git 存储库中 具有其自己的 Maven 构建 此外 应用程序和一些库都依赖于 g
  • SQLSTATE[HY000] [1045] 用户“用户名”@“localhost”的访问被拒绝(使用密码:YES)

    在我的 Ubuntu VM 中 我不断收到 SQLSTATE HY000 1045 用户 用户名 localhost 的访问被拒绝 使用密码 YES update 我在 env 文件中像这样配置了我的数据库 DB HOST 45 55 88
  • 没有类定义的反序列化对象实例

    任何人都知道从二进制 java 序列化对象创建 java 对象实例的工具 脚本 程序 任何东西吗 我没有 class 文件 所以我不能 据我所知 简单地创建一个 ObjectInputStream 并从那里加载它 该对象具有默认的序列化机制
  • DataGridView SelectionChanged 事件多次触发

    在我的应用程序中 我使用 DataGridView 来显示列表 当用户在数据网格视图中选择一条记录时 它应该在另一个面板中显示详细信息 对于选择 我被要求使用 DataGridView1 SelectionChanged 事件 DataGr
  • Android:如何从收到的短信中获取电话号码?

    我有一个广播接收器 SMSApp 它的 onReceive 会从意图中读取bundleExtras 在这里 我如何从bundleExtras中读取电话号码 if intent getAction equals SMS RECEIVED Bu
  • 本地报表处理期间发生错误。报表的定义“无效”

    我是使用 SSRS 的新手 我正在使用一个 rdlc文件用于使用 VS 2012 生成 PDF 报告 当我尝试设置如下参数时 ReportParameter param new ReportParameter kvp Key kvp Val
  • Gnuplot PDF 终端在 Mac 上出现字体问题

    出乎意料的是 我的 Gnuplot 开始出现问题pdfcairo终端 生成的 PDF 文件中的字体被卡住 就好像各个字符的宽度被设置为零一样 我在 Mac OS 上使用 Gnuplot 5 2 7 通过自制程序安装 这里是一个最小的不起作用
  • java.lang.ClassNotFoundException:在更新 sdk 后未在路径上找到类: DexPathList

    大家好 我的应用程序一直工作正常 直到昨天 我昨天更新了我的 SDK 它首先开始出现错误 然后出现错误 在值 v24 处找不到资源 像这样的事情我通过更改 build gradle 中的以下行来搜索并解决它 compileSdkVersio
  • iPhone:如何使用平移手势移动状态栏

    就像 Instagram 探索 选项卡一样 当我滚动内容时 状态栏也会移动 总是打电话全屏滚动 like here 当用户滚动tableView时 NavigationBar TabBar同时滚动显示或隐藏 我的问题是 不仅是Navigat
  • SRV 记录的 Java DNS 查找

    在下面的 java 代码中 我进行 DNS SRV 记录查找 以解析给定域名 例如 root 1000000000 blubluzone com 的目标域名和关联端口 用 表示的查找函数HERE 下面以某种方式返回 null 我无法获得查询
  • 为什么我必须在所有响应中传递 RequestContext?

    我想在导航菜单中突出显示当前页面 显然 当您在菜单链接的页面上时 我需要为菜单链接提供一个类似 活动 的类 这是一个经典问题 我见过很多解决方案proposed 我的问题是我讨厌他们所有人 并且认为他们都不是很干 例如 register s