0

我正在使用 ajax 调用 sqlalchemy 和金字塔从我的 mysql 数据库中提取数据并分页。我的 Ajax 调用是:

$.ajax({
    type: 'GET',
    url: "results",
    dataType: 'json',
})
.fail( function (jqXHR, textStatus, errorThrown){
    alert(errorThrown);
    })
    .done(function(data){   
        $.each(data.myitems, function(index, item){
          // do stuff here  
        });
    });

我的看法是:

def pager(request):
    query = DBSession.query(MyTable)
    page_url = paginate.PageURL_WebOb(request)
    customers = paginate.Page(query, 
                     page=int(request.params.get("page", 1)), 
                     items_per_page=25, 
                     url=page_url)

    return render_to_response ("templates/my_json.jinja2",
                        {"customers": customers},
                        request=request)

在我的 jinja2 模板中,我有:

{
"page":{{ customers.page }},
"next_page":{{ customers.next_page }},
    "customerlist":[{% for cus in customers %}
        {"name":"{{ cus.name }}",
        "birthday":"{{ cus.birthday }}",
     {% if not loop.last %},{% endif %}{% endfor %}
    ]
}

然后我的数据如下所示:

{
"thisvariable":1,
"anothervariable":2,
    "myitems":[
        {"name":"Matt",
        "birthday":"1978-02-23 00:00:00"},
        {"name":"Carol\y",
        "birthday":"1967-05-05 00:00:00"},
        {"name":"Bob",
        "birthday":"1984-02-03 00:00:00"}
        ]
}

如何逃避 Carol\y 中的“\”?我收到一个错误:“SyntaxError: Unexpected token y”。在 Jinja2 中,我尝试了 |e 转义但得到了同样的错误。

编辑:我也在我的models.py中尝试过:

from re import escape
class MyTable(Base):
  ....
  def __init__(self, name=""):
        self.name = escape(name)

我仍然得到同样的错误。

4

3 回答 3

1

可能你想json.dumps改用吗?Jinja2 生成 JSON 真的很奇怪。

于 2012-09-22T22:05:04.660 回答
1

不要使用模板来渲染 JSON;改用金字塔的内置 JSON 渲染器:

from pyramid.view import view_config

@view_config(renderer='json')
def pager(request):
    query = DBSession.query(MyTable)
    page_url = paginate.PageURL_WebOb(request)
    customers = paginate.Page(query, 
                     page=int(request.params.get("page", 1)), 
                     items_per_page=25, 
                     url=page_url)

    return {"customers": customers}

不过,您可能希望将我们在其他问题中讨论的 JSON 转换方法应用于customers此处;最后一行将是:

    return {"customers": [c.json_dump() for c in customers]}

请参阅金字塔渲染器文档

于 2012-09-22T22:43:44.390 回答
0

反斜杠通常是转义字符。使用第二个反斜杠来转义反斜杠并将其视为普通字符。像这样。carol\\y.

于 2012-09-22T21:38:57.273 回答