簡體   English   中英

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 dev服務器重新啟動后第一次處理時,此代碼會產生以下錯誤消息:

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

當我按下瀏覽器的后退按鈕並重復該請求時,它運行正常。 對於所有后續請求,它也可以正常工作,直到需要重新啟動服務器(例如,我更改視圖代碼)。

此外,如果我刪除{{ sorted_events|get_item:'mykey' }} ,那么一切從一開始就可以正常工作,因此edb_extra.py似乎已經得到了正確的處理。 但是以某種方式注冊了include_tag而沒有注冊filter。

嘗試在裝飾器中使用register模板庫:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM