我是来自PHP背景的Python / Django的新手并且有一个问题。我启用了调试工具栏,看起来好像当我在视图中构建的模板中引用变量并传递给模板时,它会导致SQL查询。换句话说,模板正在对数据库进行另一次查询,而不是使用视图中构建的变量。
以下是我所谈论的一个例子。在这种情况下,打印了许多变量的页面可能有超过100个查询,这似乎不正确。我假设有一些基本的东西,我缺少并做了一些彻底的研究,但似乎无法搞清楚。任何帮助将不胜感激,谢谢!
查看:
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>
答案 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 %}