2016-12-31 16 views
0

私はDjangoを使い慣れていません。テンプレートタグを使いこなすことができません。私は私の見解では何かが欠けていることを知っていますが、私はいくつかの方法でそれを書いており、これを行う正しい方法を見つけることができないようです。私は情報を提供しようとしている私のアプリにMorrisチャートを持っています。私は、利用可能な事業者の割合を示したいと思います。私のモデルでは、演算子がis_availableかどうかを示すブール値があります。テンプレートに戻すと、テンプレートタグでパーセンテージが実行され、その値がmorris円グラフに返されます。ここでブール値のDjangoテンプレートタグ

が私の見解です:

@login_required(login_url='login/') 
    def operator(request): 
     operators = Operator.objects.all() 
     operator_status = Operator.objects.values_list('is_available', flat=True) 
     context = { 
      'operators': operators, 
      'operators_available': operator_status, 
     } 
     return render(request, 'content/operator.html', context) 

これは、使用中のテンプレートタグです:

<div class="widget-detail-1"> 
<h2 class="p-t-10 m-b-0"> {{ operators_available | percentage_of:True }} </h2> 
</div> 
</div> 

、最終的に私のテンプレートタグ:まだ少し何を混乱

@register.filter(name='percentage_of') 
def percentage_of(part, whole): 
    try: 
     return "%d"[2:] % (float(part)/whole * 100) 
    except (ValueError, ZeroDivisionError): 
     return "Division by Zero" 
+0

あなたが抱えているエラーや問題は何ですか? –

+0

処理できるテンプレートタグに値を渡すことができません。私は真偽を渡すことができますが、

答えて

0

そのあなたは実際にあなたのOperatorsモデルが実際にどのように見え、どのようにあなたの変数含まれています。しかし、私はあなたが何をしたいのかを推測し、答えを出そうとします。

operatorsoperators_availableの組み合わせを混在させているように見えますが、浮動小数点数やブール値などのデータ型の使用方法も混在しているようです。

あなたは

<h2 class="p-t-10 m-b-0"> {{ operators_available | percentage_of:True }} </h2> 

これはpercentage_of(operators_available, True)の関数呼び出しに等しく、次の書き込みあなたのテンプレートで

# This returns all Model Instances of Operators. 
operators = Operator.objects.all() 
# This only returns a list of Booleans. E.g. [True, True, False, True, True] 
operator_status = Operator.objects.values_list('is_available', flat=True) 

...あなたのコードを通過することができます。またoperators_available.valus_list('is_available')から来ており、ブール値であることを忘れないでください。あなたが実際にやっていることは、percentage_of(True, True)のようなものです。

percentage_ofの中には、これらのブール値に(float(part)/whole * 100)という数値を適用しようとすると、float(True)/True * 100のようになります。

ソリューション

あなたがコンテキストに渡す値は、あなたはそれが期待する形式であることを確認してください。現在、浮動小数点値を渡していると思われるようですが、実際にはブール値を渡しています。テンプレートタグを適用する前に値をデバッグまたは印刷してみてください。

0

あなたoperatorsoperator_status変数はマーカスリンドの答えどおりの数字である必要は:operator_statusがリストされている間、あなたのコードでは、operators変数は、オペレータオブジェクトのクエリセットです。仕事にあなたのコードを取得する最も簡単な方法は次のとおりです。

operators = Operator.objects.count() 
operator_status = Operator.objects.filter(is_available=True).count() 

そして、あなたのテンプレートにカスタムフィルタ(一部および全体)にこれらの二つの引数を渡す必要があります。

{{ operators_available|percentage_of:operators }} 

また、私ドンあなたの* 100がすでに数字をパーセントに変換しているので、文字列フォーマットの[2:]が必要だと思っていません。

関連する問題