Django自行车模板

时间:2011-11-25 14:02:22

标签: django templates include cycle

我需要在Django模板中输出对象,以便每个对象都有自己的模板。模板保存在变量“模板”中,如 - ['path / to / template1','path / to / template2',...]

有没有办法在对象循环中“循环”这些模板,就像这样:

{% for object in objects %}
   {% cycle templates as template %}
   {% include template %} // this code is just for example
{% endfor %}

我无法将这些模板直接包含在对象列表中,因为它是由paginator的模板标记生成的。

有什么想法吗?感谢。

2 个答案:

答案 0 :(得分:1)

我已经编写了模板标记,它接收一个列表变量并循环它。

from django import template
from django.template.base import TemplateSyntaxError, Node

from itertools import cycle as itertools_cycle

register = template.Library()

class CycleListNode(Node):
    def __init__(self, list_variable, template_variable):
        self.list_variable = list_variable
        self.template_variable = template_variable

    def render(self, context):
        if self not in context.render_context:
            # First time the node is rendered in template
            context.render_context[self] = itertools_cycle(context[self.list_variable])
        cycle_iter = context.render_context[self]
        value = cycle_iter.next()
        if self.template_variable:
            context[self.template_variable] = value
        return ''

@register.tag
def cycle_list(parser, token):
    args = token.split_contents()
    if len(args) != 4 or args[-2] != 'as':
        raise TemplateSyntaxError(u"Cycle_list tag should be in the format {% cycle_list list as variable %}")
    return CycleListNode(args[1], args[3])

这很简单,但解决了这个问题。

答案 1 :(得分:-1)

你可以创建一个模板标签,用你的模板做你想要的,它应该把一个路径(模板的路径)作为一个参数,然后你需要做的就是传递应该在的路径模板路径变量如果您使用自定义模板标记的请求上下文,则为上下文,如此

{% custom_tag path_to_template_dir %}