Django 为什么在提交无效表单后,我会失去对上下文的访问权限?

Django 为什么在提交无效表单后,我会失去对上下文的访问权限?,django,django-views,django-forms,django-templates,Django,Django Views,Django Forms,Django Templates,因此,我有一个URL模式:path('/',PostDetailView.as_view(),name='detail') 我有一个看法: class PostCommentView(CustomLoginRequiredMixin,CreateView): template_name = 'blog/comment.html' model = Comment form_class = CommentForm def get_context_data(self,

因此,我有一个URL模式:
path('/',PostDetailView.as_view(),name='detail')

我有一个看法:

class PostCommentView(CustomLoginRequiredMixin,CreateView):
    template_name = 'blog/comment.html'
    model = Comment
    form_class = CommentForm

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['page'] = get_object_or_404(Post, pk = self.kwargs.get('pk'))
        return context
    
    def post(self, request,pk,slug):
        if request.method == "POST":
            form = self.form_class(request.POST)
            post = get_object_or_404(Post, pk=pk)
    
            if form.is_valid():
                comment  = form.save(commit=False)
                comment.post = post
                comment.author = request.user
                comment.save()
                messages.success(request, (request, 'blog/post_detail.html', {'form': form, 'slug': post.slug, 'pk': post.id, 'username': post.author}))
                return redirect('/' + str(post.id) +'/' + str(post.slug) + '/' +'#comment')
        
        return render(request, 'blog/comment.html', {'form': form})
我有一个评论模型:

class Comment(models.Model):
    title = models.CharField(max_length = 49,)
    body = models.CharField(max_length = 250)
    post = models.ForeignKey(Post,on_delete=models.CASCADE)
    comment_date = models.DateTimeField(default = timezone.now)
    author = models.ForeignKey(User, on_delete= models.CASCADE)
    
    class Meta:
        ordering = ["comment_date"]

    def __str__(self):
        return self.title
默认用户模型和Post模型:

class Post(models.Model):
    title = models.CharField(max_length = 49)
    content = models.TextField()
    date_posted = models.DateTimeField(default = timezone.now)
    author = models.ForeignKey(User, on_delete= models.CASCADE, default = 'NicholasPolino')
    slug = models.SlugField(max_length = 250, null = True, blank = False)
    category = models.ForeignKey(Category, default= 'programming', on_delete=models.PROTECT)

    
    def __str__(self):
        return self.title


    def get_absolute_url(self):
        return reverse('detail', kwargs ={ 'slug': self.slug, 'pk':self.pk})
我有一个评论表:

class CommentForm(forms.ModelForm):

    body = forms.CharField()


    error_messages = {
        'too_long': _("comment too long"),
    }
        

    class Meta:
        model = Comment
        fields = ['body']

    def clean_body(self):
        
        body = self.cleaned_data.get("body")
        if len(body) > 5:
            raise forms.ValidationError(
                self.error_messages['too_long'],
                code='too_long'
                )
        return body
然后我在模板“blog/comment.html”中找到了表单:

<form method="POST">
        {%csrf_token%}
        <fieldset class = "form-group">
            <legend class = "border-bottom mb-2">Leave Your comment on <a href="{%url 'detail' page.pk page.slug%}">{{page.title}}</a></legend>
            {{form|crispy}}
            
        </fieldset>

        <div class= "form-group">
            <button class = "btn btn-outline-info" type ="submit">Post</button>
        </div>

    </form>

{%csrf_令牌%}
请留下您的评论
{{form | crispy}}
邮递
因此,如果我提交了一个有效的表单,一切正常,但是如果我提交了一个无效的表单,我会得到一个
NoReverseMatch,它的“detail”的反面,并且没有找到参数(“”),“)。
错误。我不明白为什么模板会在无效表单之前而不是之后识别模板中的page.pk/page.slug
{%url'detail'page.pk page.slug%}

非常感谢您的指导