2016-10-02 9 views
2

デルタ時間を「x日前」として表示します。私はDjangoのtimesinceフィルターを試しましたが、 'x日、x分'を返します。私は唯一の日を見せたい。私はhumanizeの自然な時間を試しましたが、私はDateTimeFieldのためだけだと思います。私はDateFieldを使用しています。Django - テンプレートでカスタムフィルタを読み込めません。

私はこのようなカスタムフィルタを持っています(app_filters.py)。

from django import template 
from datetime import date 

register = template.Library() 


@register.filter(name='days_since') 
def days_since(value): 
    delta = value - date.today() 

    if delta.days == 0: 
     return 'Today' 
    elif delta.days < 1: 
     return '{} days ago'.format(abs(delta.days)) 
    elif delta.days == 1: 
     return 'Tomorrow' 
    elif delta.days > 1: 
     return 'In {} days'.format(delta.days) 

これはアプリケーションフォルダです。

app/ 
    models.py 
    views.py 
    ... 
    templatetags/ 
     __init__.py 
     app_filters.py 

私は、このようなテンプレートにこのフィルタを使用しようとしているsettings.py にINSTALLED_APPSに「アプリ」を追加。

{% extends 'app/base.html' %} 
{% load app_filters %} 

{{ entry.date_updated | days_since }} 

次に、「app_filters」は登録済みのタグライブラリではありません。

私の間違いはどこですか?

+0

あなたはシェルからフィルタファイルを読み込むことはできますか? 'python manage.py shell'で' from app.templatetags import app_filters'のようなものを試してみてください。 app_filters.pyのどこかにエラーがあり、Djangoがそれをあなたに伝えていない可能性もあります。また、明白な質問を許しても、サーバーを再起動しようとしましたか? – borfast

+0

'app_filters.py'にエラーはありません。ただ試してみましたが、うまく動作します。私はあなたと同じエラーが発生しましたが、私の場合、 'templatetags'フォルダが間違った場所にあり、アプリケーションが' INSTALLED_APPS'にあったにもかかわらずピックアップされなかったからです。それもあなたの場合ですか? – borfast

+0

プロジェクトディレクトリにテンプレートタグフォルダを作成してみてください。期待どおりに動作します。 – Aniket

答えて

4

カスタムテンプレートフィルタを読み込むためにWebサーバーを再起動する必要があることに気付きました。これはこの場合の解決策です。

0

私も同様の問題がありました。再起動するだけでなく、filters.pyクラスがdjangoのINSTALLED_APPS内にあることを確認してください。

The app that contains the custom tags must be in INSTALLED_APPS in order for the {% load %} tag to work. This is a security feature: It allows you to host Python code for many template libraries on a single host machine without enabling access to all of them for every Django installation.

https://docs.djangoproject.com/en/dev/howto/custom-template-tags/#howto-custom-template-tags

関連する問題