Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

The current path, account/login/, didn't match any of these?

I'm trying to access my project (local), and I am getting this traceback:

traceback

Page not found (404)
Request Method:
GET
Request URL:
http://127.0.0.1:8000/account/login/
Using the URLconf defined in tutorial.urls, Django tried these URL patterns, in this order: 
[name='login_redirect'] 
admin/ 
account/ ^$ 
account/ ^login$ 
account/ ^logout$ 
account/ ^register$ [name='register'] 
account/ ^profile$ [name='view_profile'] 
account/ ^profile/edit$ [name='edit_profile'] 
account/ ^change-password$ [name='change_password'] 
account/ ^reset-password$ [name='reset_password'] 
account/ ^reset-password/done$ [name='password_reset_done'] 
account/ ^reset-password/confirm(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A- Za-z]{1,13}-[0-9A-Za-z]{1,23})/$ [name='password_reset_confirm'] 
account/ ^reset-password/complete$ [name='password_reset_complete'] 
The current path, account/login/, didn't match any of these. 

Main/urls.py

from django.contrib import admin
from django.urls import path, re_path, include
from tutorial import views

urlpatterns = [
path('', views.login_redirect, name='login_redirect'),
path('admin/', admin.site.urls),
path('account/', include('accounts.urls')),
]

project/urls.py

from django.conf.urls import url
from . import views
from django.contrib.auth import views as auth_views
from django.contrib.auth.views import (

PasswordResetView,
PasswordResetDoneView,
PasswordResetConfirmView,
PasswordResetCompleteView,

)

from django.urls import re_path


urlpatterns = [
url(r'^$', views.home),
url(r'^login$', auth_views.LoginView.as_view(template_name='accounts/login.html')),
url(r'^logout$', auth_views.LogoutView.as_view(template_name='accounts/logout.html')),
url(r'^register$', views.register, name='register'),
url(r'^profile$', views.view_profile, name='view_profile'),
url(r'^profile/edit$', views.edit_profile, name='edit_profile'),
url(r'^change-password$', views.change_password, name='change_password'),
url(r'^reset-password$', PasswordResetView.as_view(), name='reset_password'),
url(r'^reset-password/done$', PasswordResetDoneView.as_view(), name='password_reset_done'),
url(r'^reset-password/confirm(?P<uidb64>[0-9A-Za-z_\-]+)/(?P<token>[0-9A-Za-z]{1,13}-[0-9A-Za-z]{1,23})/$',
    PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
url(r'^reset-password/complete$', PasswordResetCompleteView.as_view(), name='password_reset_complete'),
]

middleware.py

import re
from django.conf import settings
from django.shortcuts import redirect


class LoginRequiredMiddleware:

def __init__(self, get_response):
    self.get_response = get_response

def __call__(self, request):
    response = self.get_response(request)
    return response

def process_view(self, request, view_func, view_args, view_kwargs):
    assert hasattr(request, 'user')

    if not request.user.is_authenticated:
        if True:
            return redirect(settings.LOGIN_URL)

settings.py

LOGIN_REDIRECT_URL = '/account/login'
LOGIN_URL = '/account/login/'

What is the problem here?. The redirect works, I have a feeling its in urlpatterns but cannot for the life figure it out. Driving me crazy today. Thanks for the help and sorry for the essay!

like image 912
JosephS Avatar asked Oct 17 '22 13:10

JosephS


1 Answers

Your LOGIN_URL setting has a trailing slash:

LOGIN_URL = '/account/login/'

But your URL pattern for login does not allow a trailing slash.

url(r'^login$', auth_views.LoginView.as_view(template_name='accounts/login.html')),

You could remove the slash from the LOGIN_URL. However, the usual practice in Django is to include a trailing slash in URLs. Then, the default behaviour will redirect any requests from /accounts/login to /accounts/login/ with a trailing slash.

like image 56
Alasdair Avatar answered Nov 04 '22 20:11

Alasdair