Django Custom Tag - what is this tag doing

16 Views Asked by At

New to Django custom tags, can someone explain what this tag is doing

Python version 3.9.13

Django version 3.2.18

As I am getting endblock tag missing error when this tag is included in a template as shown below

    @register.tag
def code(parser, token):
    # making the node verbatim
    parameters = token.split_contents()
    lang = parameters[1]
    try:
        verbatim = parameters[2] == 'True'
    except IndexError:
        verbatim = True
    if verbatim:
        for token in parser.tokens:
            contents = token.contents
            if token.token_type == TokenType.BLOCK:
                if contents.split()[0] == 'endcode':
                    break
            if contents.strip():
                if token.token_type == TokenType.BLOCK:
                    token.contents = '{% ' + contents + ' %}'
                elif token.token_type == TokenType.VAR:
                    token.contents = '{{ ' + contents + ' }}'
                token.token_type = TokenType.TEXT
    nodelist = parser.parse(('endcode',))
    parser.delete_first_token()
    return CodeNode(nodelist, lang=lang, verbatim=verbatim)


class CodeNode(template.Node):
    def __init__(self, nodelist, lang, verbatim):
        self.nodelist = nodelist
        self.lang = lang
        self.verbatim = verbatim

    def render(self, context):
        contents = self.nodelist.render(context).replace('\n', '', 1)
        if self.verbatim:
            contents = remove_indentation(contents)
        inner_template = template.Template(
            '{% load pygmentify %}'
            '{% pygment %}{% verbatim %}'
            f'<pre lang={self.lang}>{contents}</pre>'
            '{% endverbatim %}{% endpygment %}'
        )
        return inner_template.render(context)

example usage of tag in code are

      {% code 'django' %}
        {% international_header
          navigation_tree=my_navigation_tree
          site_section='<site-></site->section'
          site_sub_section='site-sub-section'
        %}
      {% endcode %}

Thanks in advance

0

There are 0 best solutions below