[英]How to return nested dictionary to a Mako template in Pyramid?
當我嘗試將嵌套字典返回到Mako模板時,它會將單引號替換為HTML代碼'
(我在瀏覽器的源代碼中看到了它)。
在視圖中:
@view_config(route_name='main', renderer='myproj:templates/main.mako')
def main_view(request):
info = {'name': 'Some', 'age': 20}
return {'info': info, 'country': 'Ukraine'}
在Mako:
<script type="text/javascript">func(${info})</script>
在瀏覽器的源代碼中:
<script type="text/javascript">func({'name': 'Some', 'age': 20})</script>
如何避免這種逃逸? ( renderer='json'
不是變體,因為我需要Mako中的字典)
默認情況下,Mako被配置為轉義字符串。 如果要禁用過濾器,可以通過|n
完成。 特別是${info|n}
。
但是,在您的示例中,您嘗試將python字典傳遞給javascript函數。 這顯然不會加起來,您需要將python dict變成可被javascript使用的東西。 您實際上想要在這里執行的操作是將python字典變成一個字符串,然后將其輸出,而無需過濾到您的javascript代碼。
這可能有點麻煩,但想法是在python中您可以這樣做:
@view_config(route_name='main', renderer='myproj:templates/main.mako')
def main_view(request):
info = json.dumps({'name': 'Some', 'age': 20})
return {'info': info, 'country': 'Ukraine'}
在mako中,您可以:
<script type="text/javascript">func(${info|n})</script>
默認情況下,Pyramid將mako設置為使用h
過濾器,該過濾器會轉義所有內容(您所看到的問題)。 您可以編輯默認過濾器,但這通常不是最好的主意,因為其他代碼可能會產生副作用。 另一種可能性是依靠dict的__str__
實現產生有效的javascript代碼。 在這種情況下,您無需序列化任何內容,只需運行${info|str,n}
(至少在這種情況下),即可產生所需的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.