簡體   English   中英

如何將嵌套字典返回到金字塔中的Mako模板?

[英]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({&#39;name&#39;: &#39;Some&#39;, &#39;age&#39;: 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM