【问题标题】: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 吗?

【问题讨论】:

    标签: asp.net-mvc django templates 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 邮件列表应该能够提供帮助。
    猜你喜欢
    • 2010-09-17
    • 2010-12-26
    • 2010-11-02
    • 2011-11-23
    • 1970-01-01
    相关资源
    最近更新 更多