Django:comment_create()得到了意外的关键字参数“ pk”错误

时间:2019-01-16 10:36:15

标签: django

我现在在post_detail页面上实现评论功能。 但发生comment_create()出现了意外的关键字参数'pk'错误。

我还尝试在views.py上将def comment_creat(request,post_pk):部分更改为def comment_creat(request,pk):

然后我尝试{%url'comment_create'pk = post.pk%}-> post_pk = post.pk

views.py

@login_required
def comment_create(request, post_pk):
    if request.method == 'POST':
        post = get_object_or_404(Post, pk=post_pk)
        content = request.POST.get('content')
        com_user = request.user

        if not content:
            messages.info(request, 'Write please')
            return redirect('post_detail', post_pk)
    Comment.objects.create(post=post, comment_user=com_user, comment_content=content)
    return redirect('post_detatil', post_pk)

urls.py

path('post_detail/<int:pk>/comment_create/',views.comment_create, name='comment_create')

post_detail.html

<form action="{% url 'comment_create' pk=post.pk %}" method="POST">
    {% csrf_token %}
    <input type="text", name="content", placeholder="comment...">
    <input type="submit", value="Go">
</form>

请帮助我。

1 个答案:

答案 0 :(得分:1)

您认为参数的名称为post_pk

@login_required
def comment_create(request, post_pk):
    # ...

但是在您的URL模式中,您仅使用pk

path('post_detail/<int:pk>/comment_create/',views.comment_create, name='comment_create')

您可以重命名两者中的任何一个,但是在urls.py中重命名该参数也将导致更新该视图的所有{% url ... %},因此很可能在视图,将减少编辑量:

@login_required
def comment_create(request, pk):
    if request.method == 'POST':
        post = get_object_or_404(Post, pk=pk)
        content = request.POST.get('content')
        com_user = request.user

        if not content:
            messages.info(request, 'Write please')
            return redirect('post_detail', pk)
    Comment.objects.create(post=post, comment_user=com_user, comment_content=content)
    return redirect('post_detatil', pk)

请注意,通常通过Form而不是视图本身来获取和验证数据。