python - Django template filter not registered after django dev server restart -
i spent time trying deal problem on own, maybe here able me. building larger django app removed except code highlights problem.
i define 2 custom template tags:
edb/templatetags/edb_extra.py:
register = template.library() @register.inclusion_tag('edb/templatetags/event_tile.html') def render_event_tile(event): return {'event':event} @template.defaulttags.register.filter def get_item(dictionary, key): return dictionary.get(key) with linked html edb/templatetags/event_tile.html:
<div> <h5> render: {{ event.name }} </h5> </div> i serve request through edb/views.py:
@login_required def my_view(request): events = event.objects.all() myevent = events[0] sorted_events = {'mykey': myevent} return render(request, "edb/using_tags.html", {'sorted_events':sorted_events, 'event':myevent}) and edb/using_tags.html:
{% load edb_extra %} <!doctype html> <head> <meta charset="utf-8"> </head> <body> <div class="main-panel"> {% render_event_tile event %} {{ sorted_events|get_item:'mykey' }} </div> </body> </html> this code produces following error message when processed first time after django dev server restarted:
templatesyntaxerror @ en/edb/using_tags invalid filter: 'get_item' when hit browser button , repeat request works fine. works fine subsequent requests until server needs restarted (e.g. change view code).
furthermore, if remove {{ sorted_events|get_item:'mykey' }}, works fine beginning seems edb_extra.py being correctly processed on time. somehow inclusion_tag being registered while filter not.
try use register template library in decorator:
@register.filter def get_item(dictionary, key): return dictionary.get(key)
Comments
Post a Comment