Django NoReverseMatch Reverse для 'conversation' не найден
Здравствуйте, в настоящее время я столкнулся с проблемой перенаправления пользователя на мое directs-приложение.
В NewConversation
в directs/views.py
начинается новый разговор. Его можно нажать на странице профиля user-profile.html
приложения users
. Теперь я хочу сделать то же самое в моем single-project.html
в моем projects
-приложении. Но я получаю ошибку, описанную выше. Спасибо за помощь!
directs/views.py
def NewConversation(request, username):
from_user = request.user
body = ''
try:
to_user = User.objects.get(username=username)
except Exception as e:
return redirect('search-users')
if from_user != to_user:
Message.sender_message(from_user, to_user, body)
return redirect('message')
directs/urls.py
urlpatterns = [
path('new/<username>', views.NewConversation, name="conversation"),
]
users/models.py
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, null=True, blank=True)
name = models.CharField(max_length=200, blank=True, null=True)
username = models.CharField(max_length=200, blank=True)
users/views.py
def userProfile(request, pk):
profile = Profile.objects.get(id=pk)
context = {'profile':profile}
return render(request, 'users/user-profile.html', context)
users/user-profile.html
<h2 class="dev__name">{{profile.name}}</h2>
<img class="avatar avatar--xl dev__avatar" src="{{profile.profile_image.url}}" />
<a href="{% url 'conversation' profile.user %}" class="btn profile-edit-btn">Message</a>
projects/views.py
def project(request, pk):
projectObj = Project.objects.get(id=pk)
context = {'project':projectObj}
return render(request, 'projects/single-project.html', context)
projects/models.py
class Project(models.Model):
owner = models.ForeignKey(Profile, null=True, blank=True, on_delete=models.CASCADE)
title = models.CharField(max_length=200)
id = models.UUIDField(default=uuid.uuid4, unique=True, primary_key=True, editable=False)
projects/single-project.html
<div class="project__tags" style="margin-top: 20px;">
<a href="{% url 'conversation' project.owner.user %}">Send message</a>
</div>
Думаю, вам также следует опубликовать весь трассировочный откат в своем сообщении для большей согласованности.
Начну с ошибки:
NoReverseMatch at /project/360c2471-44ff-4d8c-b536-c9da3448c002/ Reverse for 'conversation' with arguments '('',)' not found. 1 pattern(s) tried: ['message/new/(?P<username>[^/]+)\\Z']
Ваш url для разговора объявлен следующим образом:
path('new/<username>', views.NewConversation, name="conversation"),
]
Что вам следует улучшить здесь: Сначала вам следует объявить, какой тип аргумента вы ожидаете. <str:username>
Я думаю, что вы ожидаете строку.
Теперь давайте рассмотрим ошибку. Вы получаете аргумент ''
, который является пустой строкой. urlpath conversation
ожидает что-то, что не является пустой строкой. Почему, хотя это пустая строка?
{% url 'conversation' profile.user %}
и {% url 'conversation' project.owner.user %}
profile.user не будет тем, что вы ожидаете, поскольку для profile.user не задано специфическое представление, которое django templates знает, как перевести. Вместо этого вы передаете ему весь объект User
.
Я предлагаю вам либо поместить туда profile.user.username
, либо добавить метод ___str___
к вашей модели профиля.
Что-то вроде:
def __str__(self):
return self.username
Я также рекомендую улучшить ваши представления на основе функций, сообщив, какой запрос вы ожидаете (здесь это GET, я полагаю).
Также посмотрите здесь
Думаю, вам также следует опубликовать весь трассировочный откат в своем сообщении для большей согласованности.
Начну с ошибки:
NoReverseMatch at /project/360c2471-44ff-4d8c-b536-c9da3448c002/ Reverse for 'conversation' with arguments '('',)' not found. 1 pattern(s) tried: ['message/new/(?P<username>[^/]+)\\Z']
Ваш url для разговора объявлен следующим образом:
path('new/<username>', views.NewConversation, name="conversation"),
]
Что вам следует улучшить здесь: Сначала вам следует объявить, какой тип аргумента вы ожидаете. <str:username>
Я думаю, что вы ожидаете строку.
Теперь давайте рассмотрим ошибку. Вы получаете аргумент ''
, который является пустой строкой. urlpath conversation
ожидает что-то, что не является пустой строкой. Почему, хотя это пустая строка?
{% url 'conversation' profile.user %}
и {% url 'conversation' project.owner.user %}
profile.user не будет тем, что вы ожидаете, поскольку для profile.user не задано специфическое представление, которое django templates знает, как перевести. Вместо этого вы передаете ему весь объект User
.
Я предлагаю вам либо поместить туда profile.user.username
, либо добавить метод ___str___
к вашей модели профиля.
Что-то вроде:
def __str__(self):
return self.username
Я также рекомендую улучшить ваши представления на основе функций, сообщив, какой запрос вы ожидаете (здесь это GET, я полагаю).
Также посмотрите здесь