【问题标题】:Are Django template tags cached?Django 模板标签是否被缓存?
【发布时间】:2011-02-28 12:23:12
【问题描述】:

我已经经历了(痛苦的)编写用于 Django 的自定义模板标签的过程。它被注册为一个包含标签,以便它呈现一个模板。但是,一旦我尝试更改某些内容,此标记就会中断。

我尝试过更改参数的数量,并在调用时相应地更改参数。很明显,新标签代码没有被加载,因为抛出了一个错误,指出参数数量不匹配,很明显它正在尝试调用旧函数。

如果我尝试更改正在呈现的模板的名称并相应地更改磁盘上模板的名称,则会出现同样的问题。它继续尝试调用旧模板。我试过清除旧的 .pyc 文件,但没有成功。

总体而言,系统就像在缓存模板标签一样,可能是由于register 命令。我已经挖掘了无尽的线程试图找出是否是这样,但所有人都可以找到它 James Bennett 说 here register 没有做任何事情。请帮忙!

【问题讨论】:

    标签: django caching django-templates


    【解决方案1】:

    我已经经历了(痛苦的)编写用于 Django 的自定义模板标签的过程

    我同意在 django 中编写模板标签的过程比它需要的更复杂。

    但是让我指出一些第三方应用程序,当安装时,模板标签只是另一个 python 函数(或类)。

    http://github.com/alex/django-templatetag-sugar

    http://github.com/codysoyland/django-template-repl

    【讨论】:

      【解决方案2】:

      首先,我无法想象包含标签有什么复杂之处。从头开始编写一个完全自定义的标签,是的:这很复杂。但是inclusion tags 只是三行代码和一个模板——这有什么复杂的?

      其次,您的 Django 项目中的 所有 Python 代码由服务器 [*] 加载一次,并一直保留到重新启动。开发服务器通常会检测更改并重新启动自身以重新加载代码,但这并不总是有效。您应该养成检查控制台以查看它是否重新启动的习惯,并在必要时手动进行。请注意,这与缓存无关。

      [*] 严格来说,每个进程一次,但无论如何开发服务器都是单进程的。

      【讨论】:

      • 这个过程很痛苦,因为我在“魔术”下遇到了这里描述的错误,花了很长时间调试:b-list.org/weblog/2007/dec/04/magic-tags 原来所谓的 ImportError 被掩盖了,因为我的新创建的 templatetags/ 目录有一个空的 init.py 文件。它至少需要一个字符。谁知道。标签确实是三行,这只会增加挫败感。简单的代码不应该破坏!你对 Django 开发服务器是完全正确的。它如此一致地重新加载更改,以至于我不认为它是一个故障点。
      【解决方案3】:

      万一其他人遇到这种情况:确切的缓存机制尚不清楚,但重新启动 django 开发服务器可以解决问题。

      【讨论】:

        猜你喜欢
        • 2012-12-22
        • 1970-01-01
        • 1970-01-01
        • 2019-07-05
        • 2013-03-31
        • 2012-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多