Реверс для '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 %}