如何解决“ TypeError:post_details()得到了意外的关键字参数'slug'”

时间:2019-02-10 10:23:43

标签: django python-3.x django-models django-views

我正在使用django创建我的博客,并尝试以笨拙的方式发布帖子网址,在我创建模型并在视图中调用它后,它向我显示此错误:

[/ posts / post / why-i-love-python-django /处的TypeError,

post_details()获得了意外的关键字参数'slug']

我尝试在[posts / views.py line:102]中更改“ id”,并将其设置为“ slug”,并在[line:104]中对其进行了编辑

在[posts / view.py第102行]:

def post_details(request, id):
   post_list = Post.objects.active()
   post = get_object_or_404(Post, id=id)
   if post.publish > timezone.now().date() or post.draft:
        if not request.user.is_authenticated or not request.user.is_superuser:
             raise Http404

    share_string = quote_plus(post.content)

    initial_data = {
        "content_type": post.get_content_type,
        "object_id": post.id,
    }

    # post read time 
    read_time = get_read_time(post.content)
    # print(type(read_time))

    form = CommentForm(request.POST or None, initial=initial_data)

   if form.is_valid():
        c_type = form.cleaned_data.get('content_type')
        content_type = ContentType.objects.get(model=c_type)
        obj_id = form.cleaned_data.get('object_id')
        content_data = form.cleaned_data.get('content')
        parent_obj = None
        try:
            parent_id = int(request.POST.get('parent_id'))
        except:
            parent_id = None

        if parent_id:
            parent_qs = Comment.objects.filter(id=parent_id)
            if parent_qs.exists() and parent_qs.count() == 1:
                 parent_obj = parent_qs.first()

        new_comment, created = Comment.objects.get_or_create(
            user = request.user,
            content_type = content_type,
            object_id = obj_id,
            content = content_data,
            parent = parent_obj,
        )
        return HttpResponseRedirect(new_comment.content_object.get_absolute_url())

     comments = post.comments # Comment.objects.filter_by_instance(post)  # without @property

     context = {
        'post': post,
        'share_string': share_string,
        'comments': comments,
        'comment_form': form,
        'read_time': read_time,
    }
    return render(request, 'post.html', context=context)

我希望帖子会被创建并正确添加到网址中

2 个答案:

答案 0 :(得分:0)

您的post_details函数采用request(所有Django视图都应采用)和id参数,但是在urls.py中,您将提取名为slug的参数。您的函数应该使用该参数,而不要使用id

答案 1 :(得分:0)

解决方案:通过在第53行编辑[post.html]解决了此问题

<!-- path: {% url 'posts:post' id=post.id %} <br>  -->

并使其成为可接受的“ django注释”,例如:{##},因为服务器无法呈现html注释,因此我进行了如下编辑:

{# path: {% url 'posts:post' id=post.id %} #}<!-- <br> -->