File tree Expand file tree Collapse file tree 5 files changed +48
-2
lines changed
src/django_simple_nav/jinja2 Expand file tree Collapse file tree 5 files changed +48
-2
lines changed Original file line number Diff line number Diff line change 1+ from typing import cast
2+ from jinja2 import pass_context , Template , TemplateRuntimeError
3+ from jinja2 .runtime import Context
4+ from django .utils .module_loading import import_string
5+ from django_simple_nav .nav import Nav
6+
7+
8+ @pass_context
9+ def django_simple_nav (context : Context , nav : str | Nav ,
10+ template_name : str | None = None ) -> str :
11+ """Jinja binding for `django_simple_nav`"""
12+ if (loader := context .environment .loader ) is None :
13+ raise TemplateRuntimeError ('No template loader in Jinja2 environment' )
14+
15+ if type (nav ) is str :
16+ try :
17+ nav = import_string (nav )()
18+ except ImportError as err :
19+ raise TemplateRuntimeError (f'Variable does not exist: { err } ' )
20+
21+ if template_name is None :
22+ template_name = cast (Nav , nav ).template_name
23+ if template_name is None :
24+ raise TemplateRuntimeError ('Navigation object has no template' )
25+
26+ template : Template = loader .load (context .environment , template_name )
27+ return template .render (items = cast (Nav , nav ).items )
Original file line number Diff line number Diff line change 1+ """Sets up a reasonably minimal Jinja2 environment for testing"""
2+ from jinja2 import Environment , FileSystemLoader
3+ from django_simple_nav .jinja2 .django_simple_nav import django_simple_nav
4+
5+
6+ environment = Environment (
7+ loader = FileSystemLoader ('tests/templates/tests/jinja2/' )
8+ )
9+ environment .globals .update ({'django_simple_nav' : django_simple_nav })
Original file line number Diff line number Diff line change 11< ul >
2- {% for item in items %}
2+ {% for item in items recursive %}
33 < li >
44 < a href ="{{ item.url }} "> {{ item.title }}</ a >
55 {% if item.items %}
6- {% include "tests/dummy_nav.html" %}
6+ < ul >
7+ {{ loop(item.items) }}
8+ </ ul >
79 {% endif %}
810 </ li >
911 {% endfor %}
Original file line number Diff line number Diff line change 1+ from .jinja2 .environment import environment
2+
3+
4+ def test_derp ():
5+ """Render the template"""
6+ template = environment .from_string ('<p>{{ django_simple_nav("tests.navs.DummyNav", "dummy_nav.html") }}</p>' )
7+ print (template .render (some_var = [1 , 2 , 3 ]))
8+ assert True
You can’t perform that action at this time.
0 commit comments