3

テンプレートに次のコードがあります。

<div class="account">
{% if request.user.is_authenticated %}
    <a href="{% url settings %}"
       class="iconed username">{{ request.user.username }}</a>
    &nbsp;|&nbsp;
    <a href="{% url logout %}?next={{ request.path }}"
       class="iconed logout">{% trans "Logout" %}</a>
{% else %}
    <a href="{% url login %}?next={{ request.path }}" class="iconed login">{% trans "Login" %}</a>
    &nbsp;|&nbsp;
    <a href="{% url sign_up %}?next={{ request.path }}"
       class="iconed sign-up">{% trans "Sign up" %}</a>
{% endif %}
</div>

ご覧のとおり、ログインしているかどうかによって異なるリンクが表示されます。手でテストすれば問題なく動作しますが、次のコードでテストしようとすると、次のようになります。

def test_home_logged_in(self):
    if self.client.login(username='Test', password='secret'):
        home = self.app.get('/')
        self.assertOK(home)
        self.assertContains(home, '/settings/')
        self.assertContains(home, '/logout/')
    else:
        self.fail("Couldn't log in.")

login()はTrueを返しますが、テストは失敗します。ホームオブジェクトに対してshowbrowser()を呼び出したところ、返されたページは匿名ユーザーのページのように見えます。設定とログアウトへのリンクに加えて、サインアップとログインへのリンクが含まれています。

テンプレートで*request.user.is_authenticated*を使用して、ユーザーが認証されているかどうかを確認するのは正しいですか?テンプレートが、ユーザーがテストからサインアップしたことを認識しないのはなぜですか?

ありがとう!

4

2 に答える 2

12

他の質問に基づいて、django_webtestを使用していると思います。その場合は、ログインするユーザーをリクエストに指定できます。したがって、ユーザー「テスト」としてホームページにアクセスするには、次のようにします。

home = self.app.get('/', user='Test')
于 2012-02-11T21:48:41.520 に答える
2

正しいですが、テンプレートからアクセスできるようdjango.core.context_processors.requestsettings.TEMPLATE_CONTEXT_PROCESSORSする必要があります。request

于 2012-02-11T16:56:37.047 に答える