你不能像那样用.raw(…)
[Django-doc]美元..raw(…)
期望它是一个如模型所期望的那样返回列的查询.但在这里,您的查询将返回一行和一列.
您可以使用以下命令处理原始查询:
from django.db import connection
def number_of_rec(request):
with connection.cursor() as cursor:
cursor.execute('SELECT count(*) FROM mydb')
number_of_rec = cursor.fetchone()[0]
return render(request, 'test.html', {'number_of_rec': number_of_rec})
但一般而言,使用原始查询通常不是一个好主意.如果您想要计算Record
的数量,您可以使用:
def number_of_rec(request):
number_of_rec = Record.objects.count()
render(request, 'test.html', {'number_of_rec': number_of_rec})
但是,由于您不通过该视图触发模板,因此逻辑永远不会呈现.
我们可以通过以下几点来定义context processor [Django-doc]:
# app_name/context_processors.py
from django.conf import settings
def number_of_rec(request):
with connection.cursor() as cursor:
cursor.execute('SELECT count(*) FROM mydb')
number_of_rec = cursor.fetchone()[0]
return {'number_of_rec': number_of_rec}
并向以下位置注册上下文处理器:
# settings.py
TEMPLATES = [
{
# …,
'context_processors': ['app_name.context_processors.number_of_rec']
},
]