J'essaie d'imprimer les commentaires sous le blog, mais après avoir cliqué sur le bouton Soumettre, l'erreur ci-dessus apparaît. Je veux juste qu'un message de réussite soit affiché en haut de la page Web, pour lequel j'ai écrit la ligne: messages.success(request, 'your comment has been added')
, mais l'erreur apparaît!
models.py :
DoesNotExist at /blog/postComment Post matching query does not exist. Request Method: POST Request URL: http://127.0.0.1:8000/blog/postComment Django Version: 3.1 Exception Type: DoesNotExist Exception Value: Post matching query does not exist. Exception Location: C:\Users\jayant nigam\projects\practise\lib\site-packages\django\db\models\query.py, line 429, in get Python Executable: C:\Users\jayant nigam\projects\practise\Scripts\python.exe Python Version: 3.8.5 Python Path: ['C:\\Users\\jayant nigam\\projects\\everythingcs', 'C:\\Python38\\python38.zip', 'C:\\Python38\\DLLs', 'C:\\Python38\\lib', 'C:\\Python38', 'C:\\Users\\jayant nigam\\projects\\practise', 'C:\\Users\\jayant nigam\\projects\\practise\\lib\\site-packages'] Server time: Fri, 02 Oct 2020 19:21:31 +0000
urls.py :
{% extends 'base.html' %} {% block title %} {{ post.title}} {% endblock title %} {% block body %} <div class="container"> <div class="jumbotron my-4"> <div class="blog-post"> <h2 class="blog-post-title">{{post.title}}</h2> <p class="blog-post-meta">{{post.timeStamp}} by <a href="#">{{post.author}}</a></p> <p>{{post.content}}</p> </div> </div> </div> <div> <div class="container"> <h2>Comments</h2> <form action="/blog/postComment" method = 'post'> {% csrf_token %} <input type="text" name = 'comment' placeholder = 'type here'> <input type="hidden" name = "comment" value = "{{post.sno}}"> <input type="submit" value = 'submit'> </form> <div class="row my-2"> <div class="col-md-2">image here</div> <div class="col-md-10">comments here</div> </div> </div> </div> {% endblock body %}
view.py :
from django.shortcuts import render, HttpResponse, redirect from blog.models import Post, BlogComment def blogHome(request): allpost = Post.objects.all() context = {'allposts': allpost} return render(request, 'blog/blogHome.html', context) def blogPost(request, slug): post = Post.objects.filter(slug=slug).first() comments = BlogComment.objects.filter(post=post) context = {'post': post, 'comments': comments} return render(request, 'blog/blogPost.html', context) def postComment(request): if request.method == 'POST': comment = request.POST.get('comment') user = request.user postSno = request.POST.get("postSno") post = Post.objects.get(sno=postSno) comment = BlogComment(comment=comments, user=user, post=post) comment.save() messages.success(request, 'your comment has been added') return redirect(f"/blog/{post.slug}") return redirect('home')
blogPost.html :
from django.urls import path, include from blog import views urlpatterns = [ path('postComment', views.postComment, name='postComment'), path('', views.blogHome, name='home'), path('<str:slug>', views.blogPost, name='blogpost'), ]
journal des erreurs :
from django.db import models from django.contrib.auth.models import User from django.utils.timezone import now # Create your models here. class Post(models.Model): sno = models.AutoField(primary_key=True) title = models.CharField(max_length=50) content = models.TextField() author = models.CharField(max_length=50) slug = models.SlugField(max_length=200) timeStamp = models.DateTimeField(blank=True) def __str__(self): return self.title + " by " + self.author class BlogComment(models.Model): sno = models.AutoField(primary_key=True) comment = models.TextField() user = models.ForeignKey(User, on_delete=models.CASCADE) post = models.ForeignKey(Post, on_delete=models.CASCADE) parent = models.ForeignKey('self', on_delete=models.CASCADE, null=True) timestamp = models.DateTimeField(default=now)
Je ne sais pas pourquoi cette erreur apparaît!
3 Réponses :
Votre erreur est dans le modèle. Vous avez attribué un name
erroné à l'une de vos entrées:
Dans votre code:
<input type="hidden" name = "postSno" value = "{{post.sno}}">
Bonne version:
<input type="hidden" name = "comment" value = "{{post.sno}}">
ne fonctionne pas pour moi! une nouvelle erreur apparaît NameError at /blog/postComment name 'comments' is not defined
Pour résoudre votre premier problème, vous devez changer la ligne post = Post.objects.get(sno=postSno)
(dans la fonction postComment
) en quelque chose comme:
from django.http import Http404 try: post = Post.objects.get(sno=postSno) except Post.DoesNotExist: return Http404("Post does not exist") # or return HttpResponse("Post does not exist")
car il peut y avoir des situations dans lesquelles cette requête ne peut renvoyer aucun résultat et par conséquent, elle DoesNotExistError
. Le deuxième problème (je veux dire NameError at /blog/postComment name 'comments' is not defined
) vient de la même fonction ... changer cette ligne comment = BlogComment(comment=comments, user=user, post=post)
en comment = BlogComment(comment=comment or '', user=user, post=post)
résoudra ce problème.
Modifier les commentaires en commentaire en tant que "commentaires" n'est pas défini. Vous utilisez un commentaire.