0

django テンプレート ページに調査結果を表示しようとしています。特定の人口統計と各カテゴリに与えられた評価に基づく平均を表示したくありません。私が持っている調査フォームビューに、調査回答データを整数として既に保存しています。これは私がこれまでのところ残りのために持っているものです:

#views.py
def statistics(request):
    male = Survey.objects.filter(gender='male')
    ...
    #Other demographics filtered
    ...

    def avgcalc(myDemographic, myCategory):
        ratings = []

        for x in myDemographic:
            ratings.append(myCategory)

        intTotal = 0
        intCount = 0
        intLenMyList = len(myDemographic)

        while(intCount <  intLenMyList):
            intTotal += ratings[intCount]
            intCount += 1

        return intTotal/intLenMyList
...
#rest of view rendering template, etc.

ここで問題に直面します。人口統計に基づいて各カテゴリのデータを簡単に表示するにはどうすればよいですか? たとえば、私のテンプレートでやりたいこと

#template.html
Demographic: Male
Total responses for this demographic: {{ male|length }}
Average response for specific category: {{ avgcalc(male, category) }}

{{ male|length }} は男性回答者の数を表示するのにうまく機能しますが、テンプレートでは {{ avgcalc(male, category) }} を使用できません。実際には、私はすでにテーブルをセットアップしており、約 20 の人口統計と 12 のカテゴリ評価があるため、可能であれば、それぞれを自分のビューに入れる必要は避けたいと考えています (つまり、male_category_calc = avgcalc(male, category))人口統計とカテゴリごと. これは可能ですか? または、非常に長い方法で行う必要がありますか? 機能する限り、テンプレートにそれぞれを入力する必要があります. 助けやアドバイスをありがとう.

4

2 に答える 2

0

カスタムテンプレートタグまたはフィルターを使用して、テンプレート機能を拡張できます。このように:

foo_app / templatetags / foo_tags.py:

from django import template
register = template.Library()

@register.filter
def avgcalc(myDemographic, myCategory):
    ratings = []

    for x in myDemographic:
        ratings.append(myCategory)

    intTotal = 0
    intCount = 0
    intLenMyList = len(myDemographic)

    while(intCount <  intLenMyList):
        intTotal += ratings[intCount]
        intCount += 1

    return intTotal/intLenMyList

次に、template.htmlで:

{% load foo_tags %}

{{ male|avgcalc:category }}
于 2012-11-05T17:34:19.653 に答える
0

これを行うには、django のカスタム テンプレート タグを使用できます。

平均値を計算するには、django の集計を確認することをお勧めします

特定のフィールドの平均値を計算する Avg 関数があります。(あなたの場合はカテゴリ)

from django.db.models import Avg
Model.objects.all().aggregate(Avg('attribute'))
于 2012-11-05T18:26:23.340 に答える