|
| 1 | +title: django.template.base NodeList Example Code |
| 2 | +category: page |
| 3 | +slug: django-template-base-nodelist-examples |
| 4 | +sortorder: 500011366 |
| 5 | +toc: False |
| 6 | +sidebartitle: django.template.base NodeList |
| 7 | +meta: Python example code for the NodeList class from the django.template.base module of the Django project. |
| 8 | + |
| 9 | + |
| 10 | +NodeList is a class within the django.template.base module of the Django project. |
| 11 | + |
| 12 | + |
| 13 | +## Example 1 from django-angular |
| 14 | +[django-angular](https://github.com/jrief/django-angular) |
| 15 | +([project examples website](https://django-angular.awesto.com/classic_form/)) |
| 16 | +is a library with helper code to make it easier to use |
| 17 | +[Angular](/angular.html) as the front-end to [Django](/django.html) projects. |
| 18 | +The code for django-angular is |
| 19 | +[open source under the MIT license](https://github.com/jrief/django-angular/blob/master/LICENSE.txt). |
| 20 | + |
| 21 | +[**django-angular / djng / templatetags / djng_tags.py**](https://github.com/jrief/django-angular/blob/master/djng/templatetags/djng_tags.py) |
| 22 | + |
| 23 | +```python |
| 24 | +# djng_tags.py |
| 25 | +import json |
| 26 | + |
| 27 | +from django.template import Library |
| 28 | +~~from django.template.base import Node, NodeList, TextNode, VariableNode |
| 29 | +from django.utils.html import format_html |
| 30 | +from django.utils.safestring import mark_safe |
| 31 | +from django.utils.translation import get_language_from_request |
| 32 | + |
| 33 | +from djng.core.urlresolvers import get_all_remote_methods, get_current_remote_methods |
| 34 | + |
| 35 | + |
| 36 | +register = Library() |
| 37 | + |
| 38 | + |
| 39 | +@register.simple_tag(name='djng_all_rmi') |
| 40 | +def djng_all_rmi(): |
| 41 | + return mark_safe(json.dumps(get_all_remote_methods())) |
| 42 | + |
| 43 | + |
| 44 | +@register.simple_tag(name='djng_current_rmi', takes_context=True) |
| 45 | +def djng_current_rmi(context): |
| 46 | + return mark_safe(json.dumps(get_current_remote_methods(context.get('view')))) |
| 47 | + |
| 48 | + |
| 49 | +@register.simple_tag(name='load_djng_urls', takes_context=True) |
| 50 | +def djng_urls(context, *namespaces): |
| 51 | + raise DeprecationWarning( |
| 52 | + "load_djng_urls templatetag is deprecated and has been removed from this version of django-angular." |
| 53 | + "Please refer to documentation for updated way to manage django urls in angular.") |
| 54 | + |
| 55 | + |
| 56 | +class AngularJsNode(Node): |
| 57 | + def __init__(self, django_nodelist, angular_nodelist, variable): |
| 58 | + self.django_nodelist = django_nodelist |
| 59 | + self.angular_nodelist = angular_nodelist |
| 60 | + self.variable = variable |
| 61 | + |
| 62 | + def render(self, context): |
| 63 | + if self.variable.resolve(context): |
| 64 | + return self.angular_nodelist.render(context) |
| 65 | + return self.django_nodelist.render(context) |
| 66 | + |
| 67 | + |
| 68 | +@register.tag |
| 69 | +def angularjs(parser, token): |
| 70 | + bits = token.contents.split() |
| 71 | + if len(bits) < 2: |
| 72 | + bits.append('1') |
| 73 | + values = [parser.compile_filter(bit) for bit in bits[1:]] |
| 74 | + django_nodelist = parser.parse(('endangularjs',)) |
| 75 | +~~ angular_nodelist = NodeList() |
| 76 | + for node in django_nodelist: |
| 77 | + if isinstance(node, VariableNode): |
| 78 | + tokens = node.filter_expression.token.split('.') |
| 79 | + token = tokens[0] |
| 80 | + for part in tokens[1:]: |
| 81 | + if part.isdigit(): |
| 82 | + token += '[%s]' % part |
| 83 | + else: |
| 84 | + token += '.%s' % part |
| 85 | + node = TextNode('{{ %s }}' % token) |
| 86 | + angular_nodelist.append(node) |
| 87 | + parser.delete_first_token() |
| 88 | + return AngularJsNode(django_nodelist, angular_nodelist, values[0]) |
| 89 | + |
| 90 | + |
| 91 | +@register.simple_tag(name='djng_locale_script', takes_context=True) |
| 92 | +def djng_locale_script(context, default_language='en'): |
| 93 | + language = get_language_from_request(context['request']) |
| 94 | + if not language: |
| 95 | + language = default_language |
| 96 | + return format_html('angular-locale_{}.js', language.lower()) |
| 97 | + |
| 98 | + |
| 99 | + |
| 100 | +## ... source file continues with no further NodeList examples... |
| 101 | + |
| 102 | +``` |
| 103 | + |
0 commit comments