在为 `UserDict` 生成字符串时发生了错误
作者: Q7xM4创建于 2026年9月10日更新于 2026年9月16日
当我尝试为 UserDict 生成字符串时,结果是不正确的。为了便于重现,这里有一个测试。
from collections import UserDict
from jinja2 import Environment
model = Environment().from_string('{{ q|urlencode }}')
myUser = UserDict({"Aa": "[email protected]", "Bb": "[email protected]"})
print(model.render(q=myUser))我期望得到的结果是:
Aa=PersonA%40123.com&Bb=PersonB%40123.com实际上,我得到的结果是:
A=a&B=b然后,我对代码做了一些修改。我将 UserDict({"Aa": "[email protected]", "Bb": "[email protected]"}) 修改为 UserDict({"A": "[email protected]", "B": "[email protected]"}) 这次,会直接报告错误。
Traceback (most recent call last):
File "/home/test.py", line 19, in <module>
print(model.render(q=myUser))
^^^^^^^^^^^^^^^^^^^^^^
File "/home/jinja/src/jinja2/environment.py", line 1292, in render
self.environment.handle_exception()
File "/home/jinja/src/jinja2/environment.py", line 941, in handle_exception
raise rewrite_traceback_stack(source=source)
File "<template>", line 1, in top-level template code
File "/home/jinja/src/jinja2/filters.py", line 173, in do_urlencode
return "&".join(
^^^^^^^^^
File "/home/jinja/src/jinja2/filters.py", line 174, in <genexpr>
f"{url_quote(k, for_qs=True)}={url_quote(v, for_qs=True)}" for k, v in items
^^^^
ValueError: not enough values to unpack (expected 2, got 1)内容来源: pallets/jinja