Django 2 使评论字段错误

Django 2 make comment filed error

最近我决定在我的 django 应用程序中向我的模板添加一个评论块,但是当我将它添加到我的应用程序时,我遇到了这个错误:

add_comment_to_post() got an unexpected keyword argument 'item_id'

我的template.html:

{% block content %}
                                    <form action="#" method="post" novalidate="novalidate">
                                        {% csrf_token %}
                                        {{ form.as_p }}
                                        <div class="row">
                                            <div class="col-md-4">
                                                <p><label>Name*</label><input type="text" name="your-name" value=""
                                                                              size="60" class=""
                                                                              aria-required="true"
                                                                              aria-invalid="false"></p>
                                            </div>
                                            <div class="col-md-4">
                                                <p><label>Email*</label><input type="text" name="your-email"
                                                                               value=""
                                                                               size="60" class=""
                                                                               aria-required="true"
                                                                               aria-invalid="false"></p>
                                            </div>
                                            <div class="col-md-4">
                                                <p><label>Website</label><input type="text" name="your-website"
                                                                                value=""
                                                                                size="60" class=""
                                                                                aria-required="true"
                                                                                aria-invalid="false"></p>
                                            </div>
                                            <div class="col-md-12">
                                                <p><label>Message</label><textarea name="your-message" cols="60"
                                                                                   rows="3" class=""
                                                                                   aria-invalid="false"></textarea>
                                                </p>
                                            </div>
                                        </div>
                                        <div class="dividewhite2"></div>
                                        <p>
                                            <button type="button" href="{% url 'add_comment_to_post' pk=item.pk %}"
                                                    class="btn btn-lg btn-darker">Post Comment
                                            </button>
                                        </p>
                                    </form>
                                {% endblock %}

我的 models.py :

from django.db import models
from datetime import date
from django.utils import timezone


# Create your models here.

class Blogs(models.Model):
    main_image = models.ImageField(upload_to='Blogs/', help_text='This Image Is Gonna To Be Show At Blogs Page.',
                                   blank=False, default='')

class Comment(models.Model):
    post = models.ForeignKey('Blog.Blogs', on_delete=models.CASCADE, related_name='comments')
    author = models.CharField(max_length=200)
    text = models.TextField()
    created_date = models.DateTimeField(default=timezone.now)
    approved_comment = models.BooleanField(default=False)

    def approve(self):
        self.approved_comment = True
        self.save()

    def __str__(self):
        return self.text

我的form.py:

    from django.forms import ModelForm
    from .models import Blogs, Comment


    class CommentForm(ModelForm):
        class Meta:
            model = Comment
            fields = ('author', 'text',)

my views.py :
from django.shortcuts import render, get_object_or_404, redirect
from Blog.forms import CommentForm
from .models import Blogs, Comment

def item(request, items_id):
    items = get_object_or_404(Blogs, pk=items_id)
    return render(request, 'Blog/Items.html', {'item': items, 'comments': Comment})


def add_comment_to_post(request, pk):
post = get_object_or_404(Blogs, pk=pk)
if request.method == "POST":
    form = CommentForm(request.POST)
    if form.is_valid():
        comment = form.save(commit=False)
        comment.post = post
        comment.save()
        return redirect('post_detail', pk=post.pk)
else:
    form = CommentForm()
return render(request, 'blog/Items.html', {'form': form})

和我的 urls.py:

from django.urls import path
from Blog import views
from Blog import models


urlpatterns = [
    path('<int:item_id>/', views.add_comment_to_post, name='add_comment_to_post'),
    path('<int:items_id>/', views.item, name='Itemz'),
]

我检查了我的代码很多次,但我不明白我的问题是什么。 有没有人知道如何向我的应用程序添加评论或我的问题是什么? 另外,很抱歉我的问题写错了

仔细检查您的 url 模式?尝试:

urlpatterns = [
    path('<int:pk>/', views.add_comment_to_post, name='add_comment_to_post'),

您的视图方法中的变量名称需要与 url 中的变量名称匹配。因此,您需要两者都是 pk 或两者都是 item_id

改变这个

def add_comment_to_post(request, pk):

收件人:

def add_comment_to_post(request, item_id):

然后把你写的pk函数里面的所有地方改成item_id

views.py

def add_comment_to_post(request, item_id):
    post = get_object_or_404(Blogs, pk=item_id)
    if request.method == "POST":
        form = CommentForm(request.POST)
        if form.is_valid():
            comment = form.save(commit=False)
            comment.post = post
            comment.save()
            return redirect('post_detail', pk=post.pk)
    else:
        form = CommentForm()
    return render(request, 'blog/Items.html', {'form': form, 'item': post})

并在您的模板中:

<button type="button" href="{% url 'add_comment_to_post' item.pk %}"
    class="btn btn-lg btn-darker">Post Comment
</button>

问题的发生是因为在 urls.py 中有两个主题传递给一个视图。 更改对此的看法:

urlpatterns = [
    path('<int:pk>/', views.item, name='Itemz'),
]

然后将 html 部分更改为:

{% if not user.is_authenticated %}
                                        <p><a href="{% url 'login' %}" class="btn btn-gr btn-xs">Login To Send
                                            A Command.</a></p>
                                    {% endif %}
                                    <div class="dividewhite2"></div>
                                    {% if user.is_authenticated %}
                                        <form method="post" novalidate="novalidate">
                                            {% csrf_token %}
                                            {{ form.as_p }}
                                            <div class="dividewhite2"></div>
                                            <p>
                                                <button href="{% url 'Itemz' item.id %}" type="submit"
                                                        class="btn btn-lg btn-darker">Post Comment
                                                </button>
                                            </p>
                                        </form>
                                    {% endif %}

现在 Django 项目将 运行 正常。