Reputation: 315
Can someone explain to me how these urls work in django? I'm trying to create a follow/unfollow feature for a twitter clone, the follow is working but when I use the unfollow I am getting the following error. Can someone explain to me why this is failing? I am still learning django and would like to know why this isn't working.
NoReverseMatch at /u/fake_account/unfollow/ Reverse for 'foxyprofile' with keyword arguments '{'usersname': 'fake_account'}' not found. 1 pattern(s) tried: ['u/(?P[^/]+)/$']
Here is my code let me know if you need more.
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'),
]
Upvotes: 0
Views: 59
Reputation: 56
You should try this in views.py in unfollow_foxy
from django.urls import reverse
# your code
return redirect(reverse('foxyprofile'), usersname=username)
Upvotes: 1
Reputation: 985
I think the error from this line in html file:
<a href="{% url 'unfollow_foxy' username=user.username %}" class="button is-danger">Unfollow {{ user.username}}</a>
Try to change it to:
<a href="{% url 'unfollow_foxy' user.username %}" class="button is-danger">Unfollow {{ user.username}}</a>
Upvotes: 1