Django 开发服务器重新启动后未注册 Django 模板过滤器
Posted
技术标签:
【中文标题】Django 开发服务器重新启动后未注册 Django 模板过滤器【英文标题】:Django template filter not registered after django dev server restart 【发布时间】:2016-05-16 10:13:20 【问题描述】:我花了太多时间试图自己解决问题,也许这里有人可以帮助我。我正在构建一个更大的 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 dev 服务器重启后第一次处理时,此代码会产生以下错误消息:
TemplateSyntaxError at en/edb/using_tags
Invalid filter: 'get_item'
当我点击浏览器后退按钮并重复请求时,它工作正常。它也适用于所有后续请求,直到需要重新启动服务器(例如,我更改了视图代码)。
此外,如果我删除 sorted_events|get_item:'mykey'
,一切从一开始就正常工作,因此似乎 edb_extra.py 正在按时正确处理。但不知何故,inclusion_tag 正在注册,而过滤器没有。
【问题讨论】:
【参考方案1】:尝试在装饰器中使用register
模板库:
@register.filter
def get_item(dictionary, key):
return dictionary.get(key)
【讨论】:
谢谢,我花了好几个小时试图看看发生了什么,在 10 分钟内得到了答案。它有效。以上是关于Django 开发服务器重新启动后未注册 Django 模板过滤器的主要内容,如果未能解决你的问题,请参考以下文章