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, я полагаю).

Также посмотрите здесь

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