0

私が取り組んでいるアプリのフェデレーション ログインをいじっています。コードはすでにそれほど美しくはありませんが、代わりに 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

これはコードです(プロバイダーは別のキーです:値辞書)

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 %}
4

1 に答える 1

0

わかりました。なぜこれが正確に当てはまるのかわかりませんが、問題を修正した変更があります(変更は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)
于 2013-01-08T18:48:18.803 に答える