Реверс для 'user-profile' с аргументами '('',)' не найден. Испробован 1 шаблон(ы): ['profile/(?P<pk>[^/]+)/\\\Z'].

Я новичок в изучении кода и работаю над созданием простого django сайта, где пользователи могут нажимать на других пользователей для просмотра их комментариев (нажав на их профиль). Однако django продолжает выдавать эту ошибку, когда я запускаю сайт.

Мой urls.py

from django.urls import path
from . import views 

urlpatterns = [
    path('login/', views.loginPage, name="login"),
    path('logout/', views.logoutUser, name="logout"),
    path('register/', views.registerPage, name="register"),


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

    path('create-room/', views.createRoom, name="create-room"),
    path('update-room/<str:pk>', views.updateRoom, name="update-room"),
    path('delete-room/<str:pk>', views.deleteRoom, name="delete-room"),
    path('delete-message/<str:pk>', views.deleteMessage, name="delete-message"),


страница 1 моего шаблона (profile.html)

{% extends 'main.html' %}


{% block content %}
<h1>{{user.username}}</h1>



{% endblock content %}

другой шаблон (компонент feed на моей домашней странице)

<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>
            <hr>
        </div>

    {% endfor %}
</div>

my views.py

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

Потому что pk имеет тип int, а не тип str.

Просто измените все маршруты на <int:pk>/.

Попробуйте следующий код:

Urls.py

urlpatterns = [
    path('login/', views.loginPage, name="login"),
    path('logout/', views.logoutUser, name="logout"),
    path('register/', views.registerPage, name="register"),


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

    path('create-room/', views.createRoom, name="create-room"),
    path('update-room/<int:pk>/', views.updateRoom, name="update-room"),
    path('delete-room/<int:pk>/', views.deleteRoom, name="delete-room"),
    path('delete-message/<int:pk>/', views.deleteMessage, name="delete-message"),

Note: Всегда давайте / в конце каждого маршрута в функции path.

Note: Представления, основанные на функциях, обычно пишутся на snake_case, а не на camelCase, поэтому будет лучше, если вы измените название представления на user_profile вместо userProfile.

.

Я думаю, что ошибка происходит на этой строке в feed_component.html:

<a href="{% url 'user-profile' room.host.id %}">@{{room.host.username}}</a>

room.host.id разрешается в пустую строку, что вызвано объектом room с нулевым полем host.

Определение модели Room допускает нулевой хост:

class Room(models.Model):
    host = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)

Возможно, это из-за забытого пробела, конечно, я столкнулся с этой ошибкой только сегодня и через два часа понял, что моя проблема в простом пробеле... пробел между знаком равенства и переменной....

{% if room.host.username == request.user.username %}
<div>
    <a href="{% url 'update-room' room.id %}">Edit</a>
    <a href="{% url 'delete-room' room.id %}">Delete</a>
</div>
{% endif %}
Вернуться на верх