Django simple_tag 和设置上下文变量

2024-03-10

我正在尝试使用 simple_tag 并设置上下文变量。我使用的是 django 的 trunk 版本:

from django import template

@register.simple_tag(takes_context=True)
def somefunction(context, obj):   
    return set_context_vars(obj)

class set_context_vars(template.Node):
    def __init__(self, obj):
        self.object = obj
    
    def render(self, context):
        context['var'] = 'somevar'
        return ''

这不会设置变量,但如果我做一些非常类似的事情@register.tag它可以工作,但对象参数没有通过......

Thanks!


您在这里混合了两种方法。 Asimple_tag只是一个辅助函数,它减少了一些样板代码,并且应该返回一个字符串。要设置上下文变量,您需要(至少对于普通的 django)写你自己的标签 http://docs.djangoproject.com/en/1.2/howto/custom-template-tags/#writing-custom-template-tags使用渲染方法。

from django import template

register = template.Library()


class FooNode(template.Node):

    def __init__(self, obj):
        # saves the passed obj parameter for later use
        # this is a template.Variable, because that way it can be resolved
        # against the current context in the render method
        self.object = template.Variable(obj)

    def render(self, context):
        # resolve allows the obj to be a variable name, otherwise everything
        # is a string
        obj = self.object.resolve(context)
        # obj now is the object you passed the tag

        context['var'] = 'somevar'
        return ''


@register.tag
def do_foo(parser, token):
    # token is the string extracted from the template, e.g. "do_foo my_object"
    # it will be splitted, and the second argument will be passed to a new
    # constructed FooNode
    try:
        tag_name, obj = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError, "%r tag requires exactly one argument" % token.contents.split()[0]
    return FooNode(obj)

这可以这样称呼:

{% do_foo my_object %}
{% do_foo 25 %}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django simple_tag 和设置上下文变量 的相关文章

随机推荐

  • EF:有关跨数据库关系的数据库设计问题

    Summary 我目前正在制作一个 非常简单 多租户 Web 应用程序的原型 其中用户 存储在数据库中 1 可以注册到不同的租户 存储在数据库中per租户 相同的数据库模式 我认为这种架构适用于许多多租户解决方案 遗憾的是 我发现实体框架不
  • 使用 requestSpotInstances 的 TagSpecifications 使用 aws-sdk 的 UnexpectedParameter

    我正在尝试向我的 AWS Spot 请求添加标签 但它已经归还给我了 UnexpectedParameter Unexpected key TagSpecifications found in params LaunchSpecificat
  • Delphi 泛型类可以从其类参数派生吗?

    我一直在尝试定义一个通用的 可继承的 TSingleton 类 这是我正在进行的工作 TSingleton
  • 在 C# 中解析 JSON 数据

    我有一个 JSON 数据如下 id 367501354973 from name Bret Taylor id 220439 由 IDictionary String Object 的对象 结果 返回 在我的 C 代码中 我不确定你是如何解
  • Perl:命名参数验证最佳实践

    我在类方法调用中使用命名参数 想知道是否有最佳实践来确保不传递未知参数 这就是我正在做的 sub classmethod my self shift my args param1 gt default1 param2 gt default2
  • fft后如何在C上均衡

    首先感谢您花时间回答 我的问题是下一个 我尝试使用 fft 快速傅立叶变换 在 C 上构建均衡器 因为现在我能够在向量 音频样本 上正确应用 fft 对其进行归一化 然后应用逆 fft 因为这里一切都好 但是当我尝试修改 fft 的结果 以
  • 如何从组件内的单点捕获 vuejs 错误

    我有一个使用大量 axios 的组件then catch 在捕获中我总是抛出console error like axios get then catch error gt console error 还有其他一些地方我也抛出错误 我正在寻
  • LabelEncoder指定DataFrame中的类

    我正在将 LabelEncoder 应用于 pandas DataFrame df Feat1 Feat2 Feat3 Feat4 Feat5 A A A A E B B C C E C D C C E D A C D E 我将标签编码器应
  • 如何解析 Netlogo 中的字符串?

    Context 对于我的模型 我希望有一个输入 用户可以在其中输入一系列值 E g 我希望从上面显示的输入中得到一个由五个数字组成的列表 例如 0 5 0 2 0 0 2 0 5 这样我就可以使用他们输入的数字进行一些计算 问题 不幸的是
  • 设置 SQL_MODE="NO_AUTO_VALUE_ON_ZERO";给出一个错误

    我的 mysql 数据库有问题 我无法从我的朋友那里导入数据库 我需要一些帮助 SET SQL MODE NO AUTO VALUE ON ZERO SET time zone 00 00 ERROR 声明的开头出人意料 靠近位置 0 的
  • GUID 可以多短?

    我知道标准 GUID 它们可以变得更短吗 其背后的理论是什么 Greg Dean 的答案是正确的 但为了了解 GUID 是如何生成的以及为什么不应该缩短它 我强烈建议您阅读下面的文章 新旧事物 GUID 是全局唯一的 但 GUID 的子字符
  • 如何扩展从npm包导入的vue组件?

    如果您有通过 Node 安装的 vue 组件 node modules vendor somecomponent vue 有什么方法可以修改 扩展该组件的模板 方法吗 Update 尝试下面的示例后 我遇到了这个问题 我在用https gi
  • VB.NET:哪个 As 子句与带有 Option Strict On 的匿名类型一起使用?

    考虑始终声明的要求Option Strict On 我们总是需要用As关键词 匿名类型的类型是什么 例子 Dim product As New With Key Name paperclips Price 1 29 接下来会发生什么As 尝
  • 使用 .NET Framework 或 Windows API 检测 Windows 11

    在 NET Framework 中 获取可以使用的操作系统版本Environment OSVersion与Major and Minor告诉您 Windows 版本的值 即 6 1 Windows 7 10 0 Windows 10 尽管
  • 在不创建主题的情况下更改 emacs 中特定文本的颜色

    是否可以选择您正在编辑的一段文本并更改其颜色 我知道可以创建一个颜色主题来为某些类型的文本着色 例如某种编程语言中的着色函数 但是是否可以对特定 emacs 中的选定文本片段进行一次性颜色更改不创建主题的文档 提前致谢 在任何情况下 主题都
  • 无法访问对象原型上的方法

    我可以创建一个Cat对象并在其原型上设置一个方法来打印猫的名字 var log function message var results result results append p message p function Cat name
  • 从 OnActionExecuting 重定向到外部 url?

    我需要从 OnActionExecuting 方法重定向到外部网址 比方说 www google com 现在我正在使用这样的东西 public override void OnActionExecuting ActionExecuting
  • 如何使用变换原点让 svg 元素从中心旋转? [复制]

    这个问题在这里已经有答案了 我正在尝试对 svg 矩形元素进行非常简单的旋转 我希望这个元素相对于它的中心旋转 我试图使用transform origin属性来实现这一点 参见代码片段 尽管尝试使用 center 或 50 从中心旋转 但它
  • 使用 sql 查询在 hibernate 中创建新的对象实例

    我正在尝试使用查询在 hibernate 中创建一个对象 然后该对象将被保存回表示该类的表中 hbm xml 文件摘录
  • Django simple_tag 和设置上下文变量

    我正在尝试使用 simple tag 并设置上下文变量 我使用的是 django 的 trunk 版本 from django import template register simple tag takes context True d