模板中的Django变量导致SQL查询

时间:2014-09-20 12:58:33

标签: python django

我是来自PHP背景的Python / Django的新手并且有一个问题。我启用了调试工具栏,看起来好像当我在视图中构建的模板中引用变量并传递给模板时,它会导致SQL查询。换句话说,模板正在对数据库进行另一次查询,而不是使用视图中构建的变量。

以下是我所谈论的一个例子。在这种情况下,打印了许多变量的页面可能有超过100个查询,这似乎不正确。我假设有一些基本的东西,我缺少并做了一些彻底的研究,但似乎无法搞清楚。任何帮助将不胜感激,谢谢!

one example

查看:

def test(request):

    weather = []
    w = Weather_main.objects.filter(location_id=3)
    w = w.select_related('location__name')
    weather.append(w)

    w = Weather_main.objects.filter(location_id=6)
    w = w.select_related('location__name')
    weather.append(w)

    w = Weather_main.objects.filter(location_id=9)
    w = w.select_related('location__name')
    weather.append(w)

    context = {'weather': weather,
         'num_weather_locs': range(len(weather))}

    return render(request, 'test.html', context)

模板:

{% load app_filters %}

<BODY>

{{ status }} <br><br>

{% if weather %}
    {% for w in weather %}
        {{ w.0.location.name }}<br>
        {{ w.0.weather_date }}<br><br>
    {% endfor %}
{% else %}
    <p>Weather does not exist</p>
{% endif %}

</BODY>

1 个答案:

答案 0 :(得分:2)

为了加入不同位置的天气信息,最好使用__in的单个查询:

def test(request):
    weather = Weather_main.objects.filter(location_id__in=[3, 6, 9]).select_related('location__name')

    context = {'weather': weather}
    return render(request, 'test.html', context)

然后,在模板中,遍历weather查询集:

{% for w in weather %}
    {{ w.location.name }}<br>
    {{ w.weather_date }}<br><br>
{% endfor %}