Index: django/django/contrib/admin/sites.py
===================================================================
--- django/django/contrib/admin/sites.py	(revision 8365)
+++ django/django/contrib/admin/sites.py	(working copy)
@@ -230,7 +230,6 @@
         """
         Displays the login form for the given HttpRequest.
         """
-        from django.contrib.auth.models import User
 
         # If this isn't already the login page, display it.
         if not request.POST.has_key(LOGIN_FORM_KEY):
@@ -250,19 +249,7 @@
         password = request.POST.get('password', None)
         user = authenticate(username=username, password=password)
         if user is None:
-            message = ERROR_MESSAGE
-            if u'@' in username:
-                # Mistakenly entered e-mail address instead of username? Look it up.
-                try:
-                    user = User.objects.get(email=username)
-                except (User.DoesNotExist, User.MultipleObjectsReturned):
-                    message = _("Usernames cannot contain the '@' character.")
-                else:
-                    if user.check_password(password):
-                        message = _("Your e-mail address is not your username."
-                                    " Try '%s' instead.") % user.username
-                    else:
-                        message = _("Usernames cannot contain the '@' character.")
+            message = self.get_login_error_message(request, False, username, password)
             return self.display_login_form(request, message)
 
         # The user data is correct; log in the user in and continue.
@@ -280,7 +267,8 @@
                         request.session.delete_test_cookie()
                         return http.HttpResponseRedirect(request.get_full_path())
             else:
-                return self.display_login_form(request, ERROR_MESSAGE)
+                message = self.get_login_error_message(request, True, username, password)
+                return self.display_login_form(request, message)
     login = never_cache(login)
 
     def index(self, request, extra_context=None):
@@ -337,6 +325,29 @@
         )
     index = never_cache(index)
 
+    def get_login_error_message(self, request, is_authenticated, username, password):
+        """
+        Returns a error message when login has failed, and gives suggestions on
+        how to resolve the error.
+        """
+        
+        from django.contrib.auth.models import User
+        message = ERROR_MESSAGE
+        if not is_authenticated:
+            if u'@' in username:
+                # Mistakenly entered e-mail address instead of username? Look it up.
+                try:
+                    user = User.objects.get(email=username)
+                except (User.DoesNotExist, User.MultipleObjectsReturned):
+                    message = _("Usernames cannot contain the '@' character.")
+                else:
+                    if user.check_password(password):
+                        message = _("Your e-mail address is not your username."
+                                    " Try '%s' instead.") % user.username
+                    else:
+                        message = _("Usernames cannot contain the '@' character.")
+        return message
+
     def display_login_form(self, request, error_message='', extra_context=None):
         request.session.set_test_cookie()
         if request.POST and request.POST.has_key('post_data'):
