2016-02-06 24 views
0

我花了太多時間嘗試自行處理問題,也許有人在這裏能夠幫助我。我正在構建一個更大的django應用程序,但除了突出顯示問題的代碼之外,刪除了所有內容。Django模板過濾器未在django dev服務器重啓後註冊

我定義了兩個自定義模板標籤:

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正在按時正確處理。但不知怎的,包含_tag正在註冊,而過濾器沒有。

回答

2

嘗試使用register模板庫在你的裝飾:

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

謝謝你,我花了幾個小時想看看發生了什麼,在10分鐘內得到了這裏的答案。有用。 – pegazik