2017-10-03 1 views
0

私はこのカスタムフィルタをDjangoで作成しようとしていました。Djangoカスタムフィルタエラーです。

私のtemplatetagsフォルダにあります。__init__.pyalcextra.pyというファイルがテンプレートにあります。最初に静的ファイルとtemplatetagsを読み込みます。私は、サーバーをリセットし、ファイルを削除して再度作成しようとしました。

{% load staticfiles %} {% load alcextra %} これは私のメインのhtmlファイルに拡張されています。私はそれをメインのhtmlファイルに入れてみました。 '乗算':

@register.filter("multiply", multiply) @register.filter(name="multiply") @register.filter() @register.simple_tag(takes_context=True

そして、すべてが同じエラー、無効なフィルタを返すように私は別の@registerバージョンの負荷を試してみました、私は

from django import template 
register = template.Library() 

@register.filter 
def multiply(value, arg): 
    return value * arg 

を書かれているalcextra.pyで

。この時点で、私は何をやるべきか、何を試みるべきか分かりません。

Overview of the directory

編集:問題のテンプレート。

<!DOCTYPE html> {% load staticfiles %} {% load alcextra %} 
<html> 

<head> 
    <script src="../../static/javascript/jquery-3.2.1.js"></script> 
    <link rel="stylesheet" href="{% static 'css/alcosearch.css' %}" /> 
    <title>Alcosearch</title> 
    <meta charset="utf-8" /> 
</head> 

<body> 
    <div class="pageheader"> 
    <h1>Alcosearch</h1> 
    <h3>Vinmonopol søk</h2> 
    </div> 
    <div> 
    {% block content %} {% endblock %} 
    </div> 
    </body> 

</html> 

私は別のプロジェクトでこれを試してみましたが、うまくいきました。だから、私は何をやったのか、やっていないのかは完全にはわかっていない。

編集2:

答えは@Alasdairの説明です。私は、テンプレートにフィルタをロードし、それ以外の場所で使うことができたと思いましたが、そうではありませんでした。

+0

をあなたのテンプレートをご提示ください。 – Alasdair

答えて

0

Djangoテンプレート言語のdocumented featureです。カスタムタグやフィルタを読み込んだときに、自動的に子テンプレートで使用できるわけではありません。

ベーステンプレートでフィルタを使用していないため、alcextraライブラリをロードする必要はありません。

その後、たとえば、フィルタを使用するすべての子テンプレートにロードステートメントを追加します。

{% extends "base.html" %} 
{% load alcextra %} 
{% block content %} 
{{ my_value|multiply:5 }} 
{% endblock content %} 
関連する問題