Reverse for 'index' with keyword arguments '{'username': 'garrett', 'pk': 7}' not found

时间:2017-08-30 20:04:01

标签: python django

So I know what a reverse is, I just don't understand how the Keyword stuff fits into it. What I am trying to do is enable people to delete only their own posts. The delete button shows up properly on only the users own posts, however when you click "Delete" I'm getting an error, here is the error along with the code. The traceback doesn't highlight anything but if you want to see it or anything else let me know and I can add it. Also haven't been able to find any other questions on this site...

Error:

select 
  u_id
from 
  tabl1 tb
  inner join CTEE f on f.aid = tb.a_id
group by 
  u_id

Colorsets App views.py

MC_PREVIEW_TEXT

Colorsets app urls.py

'$(variableName)'

Project urls.py

NoReverseMatch at /colorsets/delete/7/
Reverse for 'index' with keyword arguments '{'username': 'garrett', 'pk': 7}' not found. 1 pattern(s) tried: ['$']

Colorset_confirm_delete.html

from django.shortcuts import render
from colorsets.forms import ColorForm
from colorsets import models
from colorsets.models import ColorSet
from django.utils import timezone

from django.contrib.auth import authenticate,login,logout
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse,reverse_lazy
from django.contrib.auth.decorators import login_required
from django.contrib.auth.mixins import LoginRequiredMixin
from braces.views import SelectRelatedMixin
from django.views.generic import (TemplateView,ListView,
                                    DetailView,CreateView,
                                    UpdateView,DeleteView)

# Create your views here.
#def index(request):
#   return render(request,'index.html')

class PostListView(ListView):
    model = ColorSet

    def get_queryset(self):
        return ColorSet.objects.filter(published_date__lte=timezone.now()).order_by('-published_date')

class CreateColorSetView(LoginRequiredMixin,CreateView):
    login_url = '/login/'
    redirect_field_name = 'index.html'
    form_class = ColorForm
    model = ColorSet

    def form_valid(self,form):
        self.object = form.save(commit=False)
        self.object.user = self.request.user
        self.object.save()
        return super().form_valid(form)

class DeletePost(LoginRequiredMixin,SelectRelatedMixin,DeleteView):
    model = models.ColorSet
    select_related = ('user',)
    success_url = reverse_lazy('index')

    def get_queryset(self):
        queryset = super().get_queryset()
        return queryset.filter(user_id=self.request.user.id)

    def delete(self,*args,**kwargs):
        messages.success(self.request,'Post Deleted')
        return super().delete(*args,**kwargs)

Colorset_list.html (serving as my index):

from django.conf.urls import url
from colorsets import views

app_name = 'colorsets'

urlpatterns = [
    url(r'^new/$',views.CreateColorSetView.as_view(),name='new_color'),
    url(r'delete/(?P<pk>\d+)/$',views.DeletePost.as_view(),name='delete'),
]

1 个答案:

答案 0 :(得分:0)

只要您的主urls.py没有提出任何争议:

urlpatterns = [
    ...
    url(r'^$',views.PostListView.as_view(),name='index'),
    ...
]

您应该删除colorset_confirm_delete.html处传递的所有参数,并在没有它们的情况下调用反向:

<a class="btn btn-simple btn-large" href="{% url 'index' %}">Cancel</a>