我现在在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>
请帮助我。
答案 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
而不是视图本身来获取和验证数据。