08 Dec 2016
\{% set var = "var" %\} # 在使用变量为dict的key时,不可以加上\{\{\}\} dict[var]
\{% for key in dict.keys() %\} \{\{ key \}\} \{% endfor %\}
\{% for key,value in dict.items() %\} \{\{ key \}\} \{\{ value \}\} \{% endfor %\}
错误的代码
\{% for sub_cat in TOPIC_DICT[cat].keys() %\} \{% for t in TOPIC_DICT[cat].get(sub_cat, []) %\} <li><a href="\{\{ t[1] \}\}">\{\{ t[0] \}\}</a></li> \{% endfor %\} \{% endfor %\} # 错误在于href中的t[1],当我们点击链接跳走的时候,url发生改变,作用域也改变了,而cat这个变量是存在于当前作用于的,于是乎会报错UndefinedError
正确的代码
\{% for sub_cat in TOPIC_DICT.get(cat, \{\}).keys() %\} \{% for t in TOPIC_DICT[cat].get(sub_cat, []) %\} <li><a href="\{\{ t[1] \}\}">\{\{ t[0] \}\}</a></li> \{% endfor %\} \{% endfor %\}
详情请查看:github issues explain
# 嵌套dict CAT_DICT = \{"linux":\{"linux":["basic", "advance", "commonly_services"]\}, "python":\{"python":["basic", "advance"]\}, "javaenv":\{"linux":["java_env"]\}, "javascript":\{"javascript":["node.js"]\}, "django":\{"django":["basic", "devops"]\}, \} # uri_cat是一个已知的值 # 获取内嵌dict \{% set cats_dict = CAT_DICT.get(uri_cat, \{\}) %\} # 获取内嵌dict的第一个key \{% set cat = cats_dict.keys()[0] %\} # 获取内嵌dict的值 \{% set sub_cats = cats_dict[cat] %\}
上面的\{\{和\}\}是为了不和jinja2语法冲突,其实\只是转义符,实际使用时没有这个符号