#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, однако это тоже не сработало.