2

在 Django 中编写模板标签并不容易,并且涉及大量样板代码。最不痛苦的方法是什么?

  • 有没有任何库?
  • 有没有不涉及第三方应用的技巧?
  • 方法是什么?

(一旦我弄清楚如何做,我就会把这篇文章变成一个社区维基。)

4

3 回答 3

6

尝试 django-classy-tags https://github.com/ojii/django-classy-tags

于 2011-02-22T19:07:14.270 回答
4

有一些库:

  • django模板标签糖

    以前用过。让一切变得更简单,但我不知道如何用它处理大量可选参数。

    使用示例::

    ''' {% example_tag for val as asvar %} '''
    
    @tag(register, [
        Constant("for"), Variable(),
        Optional([Constant("as"), Name()]),
        ])
    def example_tag(context, val, asvar=None):
        if asvar:
            context[asvar] = val
            return ""
        else:
            return val
    
  • django-tagcon,被原作者抛弃

  • django-ttag django-tagcon 的分支

    由于基于类的方法和关键字参数支持,这两个看起来很有希望(例如{% output limit=some_limit|default:1 offset=profile.offset %}

    示例用法::

    class Welcome(ttag.Tag):
        ''' {% welcome current_user fallback "Hello, anonymous." %} '''
        user = ttag.Arg(positional=True)
        fallback = ttag.Arg(default='Hi!')
    
        def output(self, data)
            name = data['user'].get_full_name()
            if name:
                return 'Hi, %s!' % name
            return data['fallback']
    

于 2011-02-23T12:10:50.657 回答
0

我使用了 fancy_tag 装饰器:http: //pypi.python.org/pypi/fancy_tag

非常简单和强大,它带有很好的文档。

当您只想将模板标签的输出分配给上下文变量时,摆脱所有的样板。还处理(可变长度)参数和关键字参数。

比例如 django-templatetag-sugar 更容易使用。

除了内置的包含标签装饰器之外,我真的不需要其他任何东西。

于 2011-10-20T10:14:41.880 回答