与常规 Django 模板相比,NDjango 模板都有哪些限制?

Posted

技术标签:

【中文标题】与常规 Django 模板相比,NDjango 模板都有哪些限制?【英文标题】:What limitations does NDjango templates have over regular Django templates?与常规 Django 模板相比,NDjango 模板有哪些限制? 【发布时间】:2010-10-28 06:42:05 【问题描述】:

NDjango 和 Django 模板之间是否有任何差异、限制或陷阱?我对在未来的 ASP.NET MVC 项目中实现它们特别感兴趣。

我确定我将无法使用我为 Django 编写的任何自定义模板标签,但我可以将它们移植到 NDjango 吗?

【问题讨论】:

【参考方案1】:

是的,你会的。您可以通过编写自己的标签和过滤器集并在应用程序启动时注册它们来扩展默认标签和过滤器集。只有一件事要记住 - 过滤器很容易扩展,因此您只需实现两个直接接口之一(ISimpleFilter 用于无参数过滤器或 IFilter 用于具有 1 个参数的过滤器)。对于标签,概念是相同的,但由于 NDjango 本身是用 F# 编写的,因此从 C# 或 VB 使用 ITag 接口有点困难。这当然是可行的,但有点混乱。从 F# 开始,它非常简单。

在 f# 中看起来像这样:

/// A single tag implementation
and ITag = 
    /// Transforms a % % tag into a list of nodes and uncommited token list
    member Perform: Lexer.BlockToken -> IParser -> 
             Lexer.Token seq -> (Node list * Lexer.Token seq)

在c#中,它看起来像这样:

    public Tuple<FSharpList<Interfaces.Node>, IEnumerable<Lexer.Token>>
              Perform(Lexer.BlockToken __p1, Interfaces.IParser __p2,
                   IEnumerable<Lexer.Token> __p3)

再次 - 过滤器在 c# 中很容易 - 事实上,它附带的大多数过滤器都是用 c# 编写的。标签在 f# 中很简单,但在 c# 中有点混乱

就限制而言,没有任何已知的限制,我不知道。

全面披露 - 我是 ndjango 的作者之一。

【讨论】:

嗯,不得不学习 F# 的想法有点令人生畏,但仅限于只需要它来构建标签的范围内。无论如何,这一切听起来都比使用标准模板系统好得多。 就像你说的 - 需要 f# 的范围应该仅限于标签,如果你遇到困难,ndjango-dev 邮件列表应该能够提供帮助。

以上是关于与常规 Django 模板相比,NDjango 模板都有哪些限制?的主要内容,如果未能解决你的问题,请参考以下文章

Javascript没有显示在django的模板上

在 Django 中使用 HttpResponseRedirect 时如何传递模板上下文信息?

Python Django 模板和测试变量是不是为空或空字符串

带有缓存加载器的 Jinja2 与 django 模板 - 性能比较如何?

Flaks与Django的区别

如何在 django 模板中插入断点?