django - 模板标签中使用的循环变量?

标签 django templatetags

试图解决模板标签的问题。

我有两个模板标签:

@register.inclusion_tag('directory/_alphabet.html')
def alphabet_list(names):
    """ Return a list of letters that last names start with. """
    return { 'letters': [name.last_name[0] for name in names] }

class NameNode(template.Node):
    def __init__(self, letter, var_name):
        self.letter = letter
        self.var_name = var_name

    def render(self, context):
        context[self.var_name] = Person.objects.get_active().filter(
            last_name__istartswith=self.letter)
        return ''

@register.tag
def get_names(parser, token):
    try:
        tag_name, arg = token.contents.split(None, 1)
    except ValueError:
        raise template.TemplateSyntaxError, "%r tag requires arguments" % \
                token.contents.split()[0]
    m = re.search(r'for (.*?) as (\w+)', arg)
    if not m:
        raise template.TemplateSyntaxError, "%r tag had invalid arguments" % \
              tag_name
    letter, var_name = m.groups()
    return NameNode(letter, var_name)

我想像这样使用它们:
{% for letter in letters %}
<h2>{{ letter }}</h2>
{% get_names for letter as names %}
<ul>
    {% for name in names %}
    <li>{{ name }}</li>
    {% endfor %}
</ul>
{% endfor %}

但是“字母”作为单词“字母”而不是变量应该包含的任何字母发送。有没有办法解决这个问题或我缺少的东西(或者,更好的是,一个已经这样做的包)?

最佳答案

你得到字符串 "letter"因为这是模板解析器从您的模板源中读取的内容。如果要访问该变量的值,必须在NameNode.__init__中将其标记为模板变量。并使用 render 中的上下文解决它.

如下:

class NameNode(template.Node):
    def __init__(self, letter, var_name):
        self.letter = template.Variable(letter)
        self.var_name = var_name

    def render(self, context):
        try:
            context[self.var_name] = Person.objects.get_active().filter(
                last_name__istartswith=self.letter.resolve(context))
        except template.VariableDoesNotExist:
            pass
        return ''

文档中对此进行了解释 here .

关于django - 模板标签中使用的循环变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2624906/

相关文章:

python - 如何向 Django 站点中的匿名用户发送 session 消息?

python - Django - 如何获得永久链接以使用 "throwaway"slug

python - Django 在 Amazon Elastic Beanstalk 上的迁移命令被杀死

css - 我不能使用 django 模板标签换行符和证明

python - 从 django 中的 REST API 运行 Python 脚本

python - Django 中的层次结构权限

python - 我可以在 Google App Engine 上使用 Django 模板标签吗?

javascript - 使用templatetags时如何将JavaScript放在Django页面的底部?

python - 无法访问 Django 模板中的 UserProfile 模型字段。试过 {{ user.userprofile }}

python - 标记库的 Django 注册不起作用