0

Djangoを使用して何かをコーディングするたびに、同じ問題に直面します(これは、このフレームワークを使用した経験が不足しているためだと思います)。

クエリセットからテンプレートに引数を渡す方法とそれを表示する方法は知っていますが、ビューで計算された引数を追加してテンプレートで使用する方法がわかりません。

シンプルビュー(私はそれをマスターします): 例:ピザのリストを取得し、テンプレートに表示します

views.py

Pizzas = Pizza.objects.all()
return render_to_response( "pizza.html" , {'pizzas':Pizzas} )

pizza.html

{% for pizza in pizzas %}
    <li>pizza.name</li>
{% endfor %}

しかし、クエリセットにリンクされているが、ビューで計算したもののようにデータベースにない引数を追加したいとします。この引数をテンプレートに渡す方法とその使用方法がわかりません->編集:テンプレートの総カロリーですべてのピザを注文したい。

例:ピザごとに、カロリー数を計算しました

views.py

Pizzas = Pizza.objects.all()
tab = []
for pizza in Pizzas:
    # Compute some data and return the total number of calories for one pizza
    total_number_calories = XXX
    tab.append({'p':pizza,'calories':total_number_calories'})        
return render_to_response( "pizza.html" , {'pizzas_calories':tab} )

pizza.html

?

これらの追加データをテンプレートに渡す方法が適切かどうかさえわかりません(テーブルを作成し、それを引数としてテンプレートに渡します)。

Djangoでそれを行うためのアイデアやベストプラクティスがあれば、私はそれを採用します(そして、Djangoを使用している多くの人が同じことをします!)

4

2 に答える 2

0

あなたは常にビューで可能な限り多くのことを試みるべきです。示したコードでは、総カロリーによる順序付けは、forループの後に1行余分に追加されています。

tab.sort(key=lambda t: t['calories'])
于 2012-08-26T12:30:20.007 に答える
0

ビューからテンプレートまでは一方通行です。これは、ビューにリクエストを戻さないと、「データを送り返す」方法がないことを意味します。

ただし、テンプレートを使用している間は、オブジェクトを簡単に操作できます。これは、カスタムテンプレートタグとフィルターを使用して行われます

テンプレートは、ビューから取得した任意のオブジェクトを独自のフィルターに渡すことができ、フィルターの結果はテンプレートに表示されます。

あなたの場合、caloriecountビューで使用するのと同じロジックを使用して、と呼ばれるフィルターを作成できます。

@register.filter
def caloriecount(obj): # Only one argument.
    # compute calorie for pizza object
    # total_calories = 
    return total_calories

次に、テンプレートで:

{% for pizza in pizzas %} 
   {{ pizza|caloriecount }}
{% endfor %}
于 2012-08-26T12:02:46.873 に答える