【发布时间】:2010-10-28 06:42:05
【问题描述】:
NDjango 和 Django 模板之间是否有任何差异、限制或陷阱?我对在未来的 ASP.NET MVC 项目中实现它们特别感兴趣。
我确定我将无法使用我为 Django 编写的任何自定义模板标签,但我可以将它们移植到 NDjango 吗?
【问题讨论】:
标签: asp.net-mvc django templates ndjango
NDjango 和 Django 模板之间是否有任何差异、限制或陷阱?我对在未来的 ASP.NET MVC 项目中实现它们特别感兴趣。
我确定我将无法使用我为 Django 编写的任何自定义模板标签,但我可以将它们移植到 NDjango 吗?
【问题讨论】:
标签: asp.net-mvc django templates ndjango
是的,你会的。您可以通过编写自己的标签和过滤器集并在应用程序启动时注册它们来扩展默认标签和过滤器集。只有一件事要记住 - 过滤器很容易扩展,因此您只需实现两个直接接口之一(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 的作者之一。
【讨论】: