Login in Django 1.5
authentication, django, email, python
Solution
`login_view() got an unexpected keyword argument 'template_name'` means that your view function should have `template_name` parameter:
def login_view(request, template_name):
'your code'
If you don't need it, don't pass it in urls.py:
(r'^login/$', login_view),
Upd.
Your `login_view` handles your POST method. You can re-write it this way to render form on GET
def login_view(request):
if request.method == 'POST':
username = request.POST['email']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None and user.is_active:
login(request, user)
return HttpResponseRedirect("/n1.html")
return HttpResponseRedirect("/account/invalid/")
form = LoginForm()
return render(request, 'enter.html', {'login_form': LoginForm})
Problem
I use MyUser model in Django 1.5 with e-mail login: model: ``` class MyUser(AbstractBaseUser): email = models.EmailField( verbose_name='email address', max_length=255, unique=True, db_index=True, ) last_name=models.CharField(max_length=30) first_name=models.CharField(max_length=30) second_name=models.CharField(max_length=30, blank=True) post=models.CharField(max_length=30, blank=True) objects = MyUserManager() USERNAME_FIELD = 'email' REQUIRED_FIELDS = ['last_name','first_name','second_name','post', ....] def get_full_name(self): return self.email def get_short_name(self): return self.email def __unicode__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_staff(self): return self.is_admin ``` I tried method with from django.contrib.auth.views import login: urls: ``` (r'^login/$', login, {'template_name': 'enter.html'}), ``` view: nothing. It works for superuser from classic User model, not for MyUser. Then I tried: view: ``` def login_view(request): username = request.POST['email'] password = request.POST['password'] user = authenticate(username=username, password=password) if user is not None and user.is_active: login(request, user) return HttpResponseRedirect("/n1.html")# Redirect to a success page. else: return HttpResponseRedirect("/account/invalid/")# Return a 'disabled account' error message ``` template: ``` {% if form.errors %} <p>Something is wrong</p> {% endif %} <form action="" method="post"> {% csrf_token %} <label for="email">Login:</label> <input type="text" name="email" value="" id="email"/> <label for="password">Password:</label> <input type="password" name="password" value="" id="username"> <input type="submit" value="login" /> <input type="hidden" name="next" value="{{next|escape}}" /> </form> ``` urls: ``` (r'^login/$', login_view, {'template_name': 'enter.html'}), ``` But I got error `login_view() got an unexpected keyword argument 'template_name'` What am I doing wrong?