Как исправить имя 'post' не определено в django в комментарии - PullRequest
0 голосов
/ 01 ноября 2019

Как исправить имя 'post' не определено в django в комментарии, когда я комментирую на моем сайте django, тогда, если я не одобряю комментарий, я получаю эту ошибку:

NameError at /comment/1/remove/
name 'post' is not defined

Я хочу отклонить комментарий, но яполучить ошибку, пожалуйста, помогите мне, я жду вас!

Вот мое приложение Urls.py

from django.urls import path,re_path
from blog import views

urlpatterns = [
    path('',views.PostListView.as_view(),name='post_list'),
    path('about/',views.AboutView.as_view(),name='about'),
    path('register/',views.user_register,name='user_register'),
    path('post/<int:pk>',views.PostDetailView.as_view(),name='post_detail'),
    path('post/new/',views.CreatePostView.as_view(),name='post_new'),
    path('post/<int:pk>/edit/',views.PostUpdateView.as_view(),name='post_edit'),
    path('post/<int:pk>/remove/',views.PostDeleteView.as_view(),name='post_remove'),
    path('drafts/',views.PostDraftListView.as_view(),name='post_draft_list'),
    re_path('^post/(?P<pk>\d+)/comment/$',views.add_comment_to_post,name='add_comment_to_post'),
    path('comment/<int:pk>/approve/',views.comment_approve,name='comment_approve'),
    path('comment/<int:pk>/remove/',views.comment_remove,name='comment_remove'),
    path('post/<int:pk>/publish/',views.post_publish,name='post_publish'),
]

Вот мой views.py

from django.shortcuts import render , get_object_or_404,redirect
from django.utils import timezone
from blog.models import *
from blog.forms import *
from django.contrib.auth.decorators import login_required
from django.urls import reverse_lazy
from django.contrib.auth.models import User
from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import (TemplateView,ListView,
                                    DetailView,CreateView,
                                    UpdateView,DeleteView)
# Create your views here.\
#......................
##########################
##########################

@login_required
def post_publish(request,pk):
    post = get_object_or_404(Post,pk=pk)
    post.publish()
    return redirect('post_detail',pk=pk)


@login_required
def add_comment_to_post(request,pk):
    post = get_object_or_404(Post,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/comment_form.html',{'form':form})

@login_required
def comment_approve(request,pk):
    comment = get_object_or_404(Comment,pk=pk)
    comment.approve()
    return redirect('post_detail',pk=comment.post.pk)

@login_required
def comment_remove(request,pk):
    comment = get_object_or_404(Comment,pk=pk)
    post_pk = comment.post.pk
    comment.delete()
    return redirect('post_detail',pk=post.pk)

Вот мой Models.py

class Comment(models.Model):
    post = models.ForeignKey('blog.Post',related_name='comments',on_delete="Cascade")
    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 get_absolute_url(self):
        #need to add reverse because reverse is not importing # post_detail
        return revrse("post_list")

    def __str__(self):
        return self.text

Вот мой Forms.py

class CommentForm(forms.ModelForm):

    class Meta():
        model = Comment
        fields = ('author','text')
        widgets = {
            'author':forms.TextInput(attrs={'class':'textinputclass'}),
            'text':forms.Textarea(attrs={'class':'editable medium-editor-textarea'}),
            }

Вот мой comment_form.html

{% extends "blog/base.html" %}
{% block content %}
<h1>New Comment</h1>
<form class="post-form" method="POST">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit" class="save btn btn-default">Post Comment</button>
</form>
<script>var editor = new MediumEditor('.editable');</script>
{% endblock %}

1 Ответ

2 голосов
/ 01 ноября 2019

Проверьте ваш views.py, последняя строка должна использовать post_pk, а не post.pk.

@login_required
def comment_remove(request,pk):
    comment = get_object_or_404(Comment,pk=pk)
    post_pk = comment.post.pk
    comment.delete()
    return redirect('post_detail',pk=post.pk) # Here, use post_pk instead
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...