記事アプリを入手してカスタムフィルターを作成しようとしています。記事アプリにtemplatetagsというディレクトリがあり、そのディレクトリ内にtags.pyがあります。これがディレクトリ構造です。
-manage.py(f)
-settings.py(f)
-articles(d)
- templatetags(d)
- tags.py(f)
テンプレートでは、記事には独自のディレクトリがあり、すべての記事テンプレートはbase.htmlテンプレートから拡張されたものです。これがテンプレート構造です。
-base.html(f)
-articles(d)
-index.html(f)
タグをbase.html {%load tags%}にロードし、index.htmlでカスタムフィルターを使用すると、無効なフィルターエラーが発生しました。
tags.py
from Django import template
from Django.template.defaultfilters import stringfilter
register = template.Library()
@register.filter
@stringfilter
def space2Dash(s):
return s.replace(' ', '_');
私が何を間違えたかわからない。
編集:フィルター名をabcfilter.py
に変更し、記事アプリをsettings.py
にロードしました
articles/index.html
{% load abcfilter %}
{{ "foo bar"|space2dash }}
エラー:
Request Method: GET
Request URL: http://localhost:8080/articles/
Django Version: 1.2.5
Exception Type: TemplateSyntaxError
Exception Value:
Invalid filter: 'space2dash'
Exception Location: ***/lib/python2.7/Django/template/__init__.py in find_filter, line 363
Python Executable: /usr/local/bin/python
Python Version: 2.7.1
Server time: Sun, 10 Apr 2011 07:55:54 -0500
置換後、最初にセミコロンを削除します。
Templatetagsディレクトリの下に__init__.py
というファイルがあります(これは、initの前後に2つのアンダースコアがあり、エディターでフォーマットするのが難しいと想定されています)。
あなたがまだ見ていないなら、ここにたくさんの情報がある良いページがあります。
http://docs.djangoproject.com/en/dev/howto/custom-template-tags/
参考までに、移動して問題を解決しました
{% load ... %}
基本テンプレートから具象テンプレートへ。この投稿もご覧ください https://stackoverflow.com/a/10427321/3198502
私はこの問題にほとんど夢中になり、上記の答えのどれも助けになりませんでした。
アプリが複数ある場合は、カスタムタグ/フィルタを含むファイル名が一意であるようにしてください。できればapp_name_filters.py
。それ以外の場合Djangoは、最初に一致するアプリを見つけたアプリからのみカスタムフィルターをロードします!