Django 开发服务器重启后未注册 Django 模板过滤器

Django template filter not registered after django dev server restart

我花了太多时间试图自己解决这个问题,也许这里有人可以帮助我。我正在构建一个更大的 Django 应用程序,但删除了除突出显示问题的代码之外的所有内容。

我定义了两个自定义模板标签:

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)

与链接 html edb/templatetags/event_tile.html:

<div>
    <h5> RENDER: {{ event.name }} </h5>
</div>

我通过 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})

最后是 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>

此代码在 django 开发服务器重新启动后第一次处理时产生以下错误消息:

TemplateSyntaxError at en/edb/using_tags
Invalid filter: 'get_item'

当我点击浏览器后退按钮并重复请求时,它工作正常。它也适用于所有后续请求,直到需要重新启动服务器(例如,我更改视图代码)。

此外,如果我删除 {{ sorted_events|get_item:'mykey' }},一切从一开始就正常,所以 edb_extra.py 似乎正在按时正确处理。但是不知何故 inclusion_tag 正在注册,而 filter 没有。

尝试在装饰器中使用 register 模板库:

@register.filter
def get_item(dictionary, key):
    return dictionary.get(key)