Reverse for 'user_page' with keyword arguments '{'pk': ''}'' not found. Я полагаю, что причиной проблемы являются мои декораторы

Итак, мое представление входа переводит пользователя в home.view, но сначала проверяет, вошел ли пользователь в систему, а затем проверяет, является ли пользователь администратором или нет через декоратор 'admin_only'. Мой пользователь окажется ложным для этого сценария (что ожидаемо). Затем пользователь перенаправляется на представление user_page, которое сначала проходит через декоратор allowed_users (который будет истинным), а затем на представление user_page. Моя цель - передать первичный ключ в представлении login_user в представление user_page, но промежуточные декораторы, как мне кажется, вызывают у меня проблемы.

views.py

@unauthenticated_user
def login_user (request):
    user = None
    if request.method == 'POST':
        temp_username = request.POST.get('username')
        temp_password = request.POST.get('password')
        user = authenticate(request, username=temp_username, password=temp_password)

        if user is not None:
            login(request, user)
            context = {'user':user}
            print ('Primary key in login view = ', user.id)
            return redirect('home', context)
        else:
            messages.info(request, "Username or Password is incorrect!")                   
    context = {'user':user }
    return render(request, 'login.html', context)  
@login_required(login_url='login')
@admin_only
def home(request, pk):
    user = User.objects.get(id=pk)
    context = {'user':user}
    return render(request,'home.html',context)
@login_required(login_url='login')
@allowed_users(allowed_roles=['customer'])
def user_page(request,pk):
    user = User.objects.get(id=pk)
    context = {'user':user}
    return render(request, 'user.html', context)

urls.py

#url.py
path('user/<int:pk>/', views.user_page, name='user_page')
path('', views.home, name='home'),

decorators.py

def allowed_users(allowed_roles=[]):
    def decorator(allow_users_view_function):
        def wrapper_function(request, *args, **kwargs):
            group = None
            if request.user.groups.exists():
                group = request.user.groups.all()[0].name

            if group in allowed_roles:
                user = request.user
                pk = user.id
                print('PK in allowed_users = ',pk )
                return allow_users_view_function(request,pk,*args, **kwargs)
            else:
                return HttpResponse("You are not authorised to view this page") 
        return wrapper_function
    return decorator                
def admin_only(admin_view_function):
    def wrapper_function(request, *args, **kwargs):
        group = None
        if request.user.groups.exists():
            group = request.user.groups.all()[0].name

        if group == 'customer':
            print('group = customer')
            user = kwargs.get('user')
            print ('Primary key in admin_only = ', user.id)
            
            pk = user.id
            print('PK in admin_only = ',pk )
            context={'pk':pk}
            return redirect('user_page', context)    
        
        if group == 'admin':
            print('group = admin')
            return admin_view_function(request, *args, **kwargs)      
    return wrapper_function

login.html

{% extends 'base.html' %}
{% block content %}

<form action="{% url 'user_page' pk=user.id %}" method="POST"> # error is occuring at this line
    {% csrf_token %}
    <input type="text" id="username" name="username" placeholder="Enter Username">
    <input type="password" id="password" name="password" placeholder="Enter Password">

    <input type="submit" value="Login">
</form>

<!--Display error message for any failed login attempt-->
{% for message in messages %}
    <p id="messages">{{message}}</p>
{% endfor %}

Don't have an account? <a href="{% url 'register' %}" >Sign Up</a>

{% endblock %}
Вернуться на верх