Экземпляр тега шаблона django - PullRequest
1 голос
/ 26 ноября 2011

трудно сформулировать вопрос, так что я перейду прямо к делу, я написал следующий тег шаблона

def do_simple_tag(parser, token):
    try:
        tag_name, name = token.split_contents()
    except ValueError:
        raise template.TemplateSyntaxError("%r tag requires exactly one argument" % token.contents.split()[0])
    if not (name[0] == name[-1] and name[0] in ('"', "'")):
        raise template.TemplateSyntaxError("%r tag's argument should be in quotes" % tag_name)
    return SimpleTagNode(name[1:-1])


class SimpleTagNode(template.Node):
    def __init__(self, name):
        self.name = name
    def render(self, context):
        content = get_content(context, request, name)
        return content

register.tag('simple_tag', do_simple_tag)

Затем я написал функцию, которая сканирует этот тег в шаблоне и получает все экземпляры этого тега в указанном шаблоне в списке, например:

def get_tags(template):
    compiled_template = get_template(template)
    simple_tag_instances = _scan_tag(compiled_template.nodelist)

def _scan_tag(nodelist, current_block=None, ignore_blocks=[]):
    tags = []
    for node in nodelist:
        if isinstance(node, SimpleTagNode):
            tags.append(node.get_name())

Итак, мой вопрос: почему происходит сбой isinstance, если узел является действительным для экземпляра SimpleTagNode (или я так верю), я проверил nodelist и увидел, что действительно были экземпляры SimpleTagNode, но все они возвращали бы false в условие isinstance, я потратил много времени, пытаясь выяснить это, но ничего не нашел, я даже использовал оболочку с запущенными функциями выше и все еще возвращал fals, любая помощь очень ценится

1 Ответ

1 голос
/ 26 ноября 2011

Итак, я наконец-то решил это, в основном в модуле, который содержал функцию _scan_tag в верхней части файла, который я импортировал класс SimpleTagNode, вот так

from simple_tag.templatetags.simple_tag import SimpleTagNode

simple_tag - имя моего приложения, а также имя файла шаблона, по какой-то причине это противоречило isinstance, поэтому я попытался

from paulo.simple_tag.templatetags.simple_tag import SimpleTagNode

Пауло - мое приложение для проекта, и оно сработало.

...