1

Django (v1.5.1) ビューからテンプレートに 2 つのクエリを送信しています。

def my_view(request):
    query1 = auth.acc() # some api call
    query2 = Characters.objects.filter(user=request.user)

    rcontext = RequestContext(request, {'q1': query1, 'q2': query2})
    return render_to_response('api_character.haml', rcontext)

あるクエリの文字列が他のクエリに表示されるかどうかを確認し、それに応じてページのチェックボックスをオン/オフにしたいと思います:

<ul>
{% for item in q1 %}
  <li>
    {{item.name}}
    {# check if item.id appears in list of objects q2 (each q2 has its own q2.id property) #}
    {% if item.id in q2 %}
      <input type="checkbox" checked="checked">
    {% else %}
      <input type="checkbox">
    {% endif %}
  </li>
{% endfor %}
</ul>

テンプレートだけでそれを行うことは可能ですか、それとも追加のテンプレートタグを書く必要がありますか?

4

2 に答える 2

1

django 1.5 では、views.py に次のように記述します。

class MyView(TemplateView):
    template_name = "api_character.haml"

    def get_context_data(self, **kwargs):
        context = super(MyView, self).get_context_data(**kwargs)
        context["query1"] = auth.acc() # some api call
        context["query2"] = Characters.objects.filter(user=request.user).values_list('id', flat=True)
    return context

または関数:

def my_view(request):
    query1 = auth.acc() # some api call
    query2 = Characters.objects.filter(user=request.user).values_list('id', flat=True)

    rcontext = RequestContext(request, {'q1': query1, 'q2': query2})
    return render_to_response('api_character.haml', rcontext)

しかし、テンプレートのどこが悪いのでしょうか? 失敗しますか?

編集

コードを確認してください。注意してくださいvalues_list

(私は django のクラスベースのビューが好きです。関数に適合させることができます)

于 2013-06-26T12:23:04.200 に答える
0

テンプレートに実際のオブジェクトは必要ないので、オブジェクトidのリストではなく のリストをテンプレートに送信することでこれを解決しました。

def my_view(request):
    query1 = auth.acc() # some api call
    query2 = Characters.objects.filter(user=request.user)
    chars = []
    for ch in query2:
      chars.append(ch.id)

    rcontext = RequestContext(request, {'q1': query1, 'q2': chars})
    return render_to_response('api_character.haml', rcontext)

そして、テンプレート コードは同じままです。

于 2013-06-26T13:22:23.077 に答える