Ошибка NoReverseMatch Django Может кто-нибудь объяснить, почему эти URL-адреса не работают?

#python #django

Вопрос:

Может кто-нибудь объяснить мне, как эти URL-адреса работают в django? Я пытаюсь создать функцию отслеживания/отмены подписки для клона twitter, функция отслеживания работает, но когда я использую отмену подписки, я получаю следующую ошибку. Может ли кто-нибудь объяснить мне, почему это не удается? Я все еще изучаю джанго и хотел бы знать, почему это не работает.

NoReverseMatch в /u/fake_account/отменить/ Отменить для «foxyprofile» с аргументами ключевых слов » {«имя пользователя»: «fake_account»} » не найден. 1 шаблон(ы) попробовал: [‘u/(?P[^/] )/$’]

Вот мой код, дайте мне знать, если вам понадобится больше.

foxyprofile.html

 {% extends 'core/base.html' %} {% load humanize %} {% block content %}
<div class="container">
  <div class="columns">
    <div class="column is-12">
      <h1 class="title">{{ user.username }}</h1>
      <p><a href="{% url 'followers' user.username %}"> Followers: {{ user.foxyprofile.followed_by.count }}</p></a>
      <p><a href="{% url 'following' user.username %}"> Follows {{ user.foxyprofile.follows.count }}</p></a>
      <hr />
      {% if user != request.user %} 
        {% if request.user.foxyprofile in user.foxyprofile.followed_by.all %}
            <a href="{% url 'unfollow_foxy' username=user.username %}" class="button is-danger">Unfollow {{ user.username}}</a>
        {% else %}
            <a href="{% url 'follow_foxy' user.username %}" class="button is-success">Follow {{ user.username}}</a>
        {% endif %} 
      {% endif %}
    </div>
  </div>
  <div class="columns">
    <div class="column is-8">
      <div class="wrapper-fox">
        {% for fox in user.foxs.all %}
        <div class="fox">
          <p class="name">{{ fox.created_by.username }}</p>
          <p>{{ fox.body }}</p>
          <p class="info">{{ fox.created_at|naturaltime}}</p>
          <hr />
          {% endfor %}
        </div>
      </div>
    </div>
  </div>
</div>
{% endblock %}
 

Views.py

 from django.shortcuts import redirect, render, get_object_or_404
from django.contrib.auth.models import User
from django.contrib.auth.decorators import login_required
# Create your views here.


def foxyprofile(request, username):
    user = get_object_or_404(User, username=username)

    context = {
        'user': user
    }
    return render(request, 'foxyprofile/foxyprofile.html', context)


@login_required
def follow_foxy(request, username):
    user = get_object_or_404(User, username=username)

    request.user.foxyprofile.follows.add(user.foxyprofile)

    return redirect('foxyprofile', username=username)


@login_required
def unfollow_foxy(request, username):
    user = get_object_or_404(User, username=username)

    request.user.foxyprofile.follows.remove(user.foxyprofile)

    return redirect('foxyprofile', usersname=username)



def followers(request, username):
    user = get_object_or_404(User, username=username)

    return render(request, 'foxyprofile/followers.html', {'user': user})

def following(request, username):
    user = get_object_or_404(User, username=username)

    return render(request, 'foxyprofile/following.html', {'user': user})
 

urls.py

 from apps.feed.views import feed, search
from apps.feed.api import api_add_fox
from django.urls import path, include
from apps.foxyprofile.views import foxyprofile, follow_foxy, unfollow_foxy, unfollow_foxy_tiny, follow_foxy_tiny, followers, following
from . import views
from django.contrib.auth import views as v

urlpatterns = [
    path('', views.homepage, name='homepage'),
    path('signup/', views.signup, name='signup'),
    path('logout/', v.LogoutView.as_view(), name='logout'),
    path('login/', v.LoginView.as_view(template_name='core/login.html'), name="login"),
    path('feed/', feed, name='feed'),
    path('api/add_fox/', api_add_fox, name='api_add_fox'),
    path('search/', search, name='search'),
    path('u/<str:username>/', foxyprofile, name='foxyprofile'),
    path('u/<str:username>/follow/', follow_foxy, name='follow_foxy'),
    path('u/<str:username>/unfollow/', unfollow_foxy, name='unfollow_foxy'),
    path('u/<str:username>/followers/', followers, name='followers'),
    path('u/<str:username>/following/', following, name='following'),
]
 

Комментарии:

1. Ошибка NoReverseMatch заключается в том, что Django не может найти шаблон URL-адреса, соответствующий URL-адресу, указанному вами в любом из URL-адресов вашего установленного приложения.

2. @HarshitGupta Хорошо, спасибо тебе за это! Это помогает, Как мне это исправить, тхо? Я не понимаю, в чем я ошибаюсь? Я предоставил ему другой URL-адрес для перехода и представление, которое делает обратное?

3. На самом деле я тоже мало знаю Джанго, но в сообщении об ошибке я думаю, что это поиск u/fake_account/unfollow/foxyprofile вместо u/fake_account/unfollow

Ответ №1:

Я думаю, что ошибка из этой строки в html-файле:

 <a href="{% url 'unfollow_foxy' username=user.username %}" class="button is-danger">Unfollow {{ user.username}}</a>
 

Попробуйте изменить его на:

 <a href="{% url 'unfollow_foxy' user.username %}" class="button is-danger">Unfollow {{ user.username}}</a>
 

Комментарии:

1. Я так и сделал! и это все та же ошибка. Спасибо тебе, тхо!

Ответ №2:

Вы должны попробовать это в views.py в unfollow_foxy

 from django.urls import reverse

# your code

return redirect(reverse('foxyprofile'), usersname=username)
 

Комментарии:

1. Спасибо @Harshit Gupta, однако это тоже не сработало.