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

通常、バックスラッシュはエスケープ文字です。2 番目のバックスラッシュを使用してバックスラッシュをエスケープし、通常の文字として扱います。このような。carol\\y.

于 2012-09-22T21:38:57.273 に答える