Django原始查询不返回/渲染html模板上的结果

时间:2015-07-03 09:45:19

标签: sql django django-forms django-templates django-views

我目前正在开发一个应用程序,该应用程序可能会访问另一个应用程序的静态数据库。这两个应用程序是独立的,但共享相同的数据库。 因为我绕过了模型类,所以我很想在我的视图中执行一些原始的sql(精确到postgrres)查询。 但是我的模板上没有返回任何结果 这是视图和模板代码

#views code

def receipt(request):
cursor = connection.cursor()

# Data retrieval operation

    cursor.execute("SELECT * FROM quickpay_client_transactions")
    transactions = cursor.fetchall()

return render(request, 'receipt.html', {"transactions":transactions})


#Templates code snippet

{% for trans in transactions %}
                                            <tr>
                                                <td>
                                                {{trans.id}}    
                                                </td>
                                                <td></td>
                                                <td>{{trans.amount}}</td>
                                                  <th>{{trans.reference}}</th>
                                                <td>
                                                        <span class="label label-success">Success</span>
                                                </td>
                                                <th>{{trans.t_stamp}}</th>
                                            </tr>
                                            {% endfor %}

1 个答案:

答案 0 :(得分:3)

首先检查您是否收到任何结果

transactions = cursor.fetchall()

第二类交易应该是列表

使用虚拟数据对工作代码进行示例:

from django.shortcuts import render
def index(request):

    transactions = [{"id":1},{"id":2}]
    return render (request, 'test/index.html', {"transactions":transactions})

HTML:

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>
Test
{% for trans in transactions %}
                                            <tr>
                                                <td>
                                                {{trans.id}}
                                                </td>

                                            </tr>
                                            {% endfor %}
</body>
</html>

或者你的sql数据可能不在str中: 试试这个

transactions = [to_string(x) for x in cursor.fetchall()]
import datetime
import decimal
def to_string(x):
    a = []
    for y in x:
        if type(y) is datetime.datetime:
            a.append(str(y))
        elif type(y) is decimal.Decimal:
            a.append(str(y))
        elif type(y) is unicode:
            a.append(y.encode("UTF-8", "ignore"))
        elif type(y) is float:
            a.append(str(y))
        else:
            a.append(y)
    return a