使用Jinja2的html内迭代错误



我正在为我正在开发的一个应用程序混淆联邦登录。代码已经以一种不太漂亮的方式工作了,但是当我试图通过在html中迭代而不是在html中迭代来美化东西时,我得到了这个错误。

  File "/home/wes/PycharmProjects/Unit3/templates/login.html", line 26, in top-level    template code
{% for p in new_providers.keys() %}
 UndefinedError: 'new_providers' is undefined

这是代码(提供程序是一个单独的键:value dict)

new_providers = {}
for name in providers.keys():
    new_providers[name] = users.create_login_url(federated_identity=providers[name])

else:
     error = "You are not logged in"
     self.render("login.html", error=error, new_providers = new_providers)
最后,这里是呈现字典的HTML和Jinja。这就是我怀疑有什么问题,但对我来说似乎没有什么明显的……
{% for p in new_providers.keys() %}
        <a href="{{ new_providers[p] }}">{{ p }}</a>
        <br>
{% endfor %}

好的,我不知道为什么会出现这种情况,但这是修复问题的更改(更改是在IF条件的self。render

原始代码:

class Login(Handler):
def get(self):
    user = users.get_current_user()
    if user:
        username = user.nickname()
        log_out = users.create_logout_url(self.request.uri)
        self.write(users.create_login_url(federated_identity='https://www.google.com/accounts/o8/id'))
        self.render("login.html", log_out=log_out, username=username)
    else:
        error = "You are not logged in"
        self.render("login.html", error=error, new_providers=new_providers)

修改代码

class Login(Handler):
def get(self):
    user = users.get_current_user()
    if user:
        username = user.nickname()
        log_out = users.create_logout_url(self.request.uri)
        self.write(users.create_login_url(federated_identity='https://www.google.com/accounts/o8/id'))
        self.render("login.html", log_out=log_out, username=username, **new_providers=new_providers**)
    else:
        error = "You are not logged in"
        self.render("login.html", error=error, new_providers = new_providers)

最新更新