python - 如何修复名称“帖子”未在 django 的评论中定义
问题描述
当我在我的 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'),
]
这是我的意见.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 %}
解决方案
检查您的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
推荐阅读
- javascript - 我不知道如何在 nodejs express 服务器中存储来自 api 调用的 json 数据,并将其发送到 react 本机客户端
- python-3.x - 尝试从 TMDB 获取系列背景
- elasticsearch - Magento\Elasticsearch7\Model\Client\Elasticsearch::query() 的返回值必须是数组类型,Model/Elasticsearch.php:367 中返回的字符串
- reactjs - web3-shh 包将在 1.3.5 版本中被弃用,不再受支持
- github-actions - 减少 GitHub Actions 步骤中的样板文件
- node.js - 无法在 Ubuntu 19.04 中安装 Node.js
- python - Python pytype 安装:无法为 pytype 构建轮子,无法为使用 PEP 517 的 pytype 构建轮子
- visual-studio - 为什么我的VS2008窗口经常刷新甚至卡死?
- python - 在我向另一个模型添加值的同时向 django 模型添加值
- diagnostics - 如何在我的 ECU 中设计诊断处理程序?