NoReverseMatch at / Reverse for 'user-profile' with arguments '('',)' not found. Проверен 1 шаблон(ы): ['profile/(?P<pk>[^/]+)/$'].

Пожалуйста, помогите кто-нибудь, я новичок в Django и не знаю, как обойти это в моем коде. Я следую учебнику, который создает чат с Django. Все работает хорошо, но потом я хотел изменить его и отобразить сообщения, написанные пользователем на странице его профиля, чтобы другие могли видеть это, но вместо этого я получил эту ошибку 'NoReverseMatch at /. Reverse for 'user-profile' with arguments '('',)' not found. Попробовано 1 шаблон(ы): ['profile/(?P[^/]+)/$']

Вот мой файл View;

from django.shortcuts import render, redirect
from django.http import HttpResponse
#from django.urls import reverse
from django.contrib import messages
from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm
from django.contrib.auth import authenticate, login, logout
from django.db.models import Q
from .models import Message, Room, Topic
from .forms import RoomForm

def userProfile(request, pk):
    user = User.objects.get(id=pk)
    rooms = user.room_set.all()
    context = {'user': user, 'rooms': rooms}
    return render(request, 'base/profile.html', context)

вот мой URL:

from django.urls import path
from . import views 

urlpatterns=[
    path('', views.home, name="home"),
    path('room/<str:pk>/', views.room, name="room"),
    path('profile/<str:pk>/', views.userProfile, name='user-profile'),
]

"Ошибка во время рендеринга шаблона В шаблоне C:\Users\Nonesi\Desktop\StudyBudy\base\templates\base\feed_component.html, ошибка в строке 9 вот мой шаблон:

<div>
    {% for room in rooms %}
        <div>
            {% if request.user == room.host %}
            <a href="{% url 'update-room' room.id %}">Edit</a>
            <a href="{% url 'delete-room' room.id %}">Delete</a>
            {% endif %}
            
           <a href="{% url 'user-profile' room.host.id %} ">@{{room.host.username}}</a>
            <h5>{{room.id}} -- <a href="{% url 'room' room.id %}">{{room.name}}</a></h5>
            <small>{{room.topic.name}}</small>
        </div>
        <hr>
    {% endfor %}        
</div>

Вы можете попробовать это :

  <div>
    {% for room in rooms %}
        <div>
            {% if request.user == room.host %}
            <a href="{% url 'update-room' room.id %}">Edit</a>
            <a href="{% url 'delete-room' room.id %}">Delete</a>
            {% endif %}
            {% if room.host.id %}
            
           <a href="{% url 'user-profile' room.host.id %} ">@{{room.host.username}}</a>
  {% endif %}
 
            <h5>{{room.id}} -- <a href="{% url 'room' room.id %}">{{room.name}}</a></h5>
            <small>{{room.topic.name}}</small>
        </div>
        <hr>
    {% endfor %}        
</div>

Показывать url профиля только если объект существует, таким образом не будет возникать ошибка обратного совпадения, конечно, это нужно улучшить и в коде бэкенда.

Вернуться на верх