我正在尝试添加新帖子,并且标题中出现错误代码。看来,当我单击带有评论的帖子时,它会显示详细信息页面,但如果有多个评论,则会出现错误。我认为这与我的详细信息视图有关。我一直在更改comment变量中的kwarg,并且遇到了不同的错误,这就是为什么我认为它与详细信息视图有关。
views.py
from django.shortcuts import render, get_object_or_404, redirect
from .models import Post, Comment
from django.utils import timezone
from .forms import PostForm
def post_index(request):
posts = Post.objects.filter(published_date__lte=timezone.now()).order_by("published_date")
return render(request, "blog/post_index.html", {"posts" : posts})
def post_detail(request, pk):
post = get_object_or_404(Post, pk=pk)
comment = get_object_or_404(Comment, post=post.pk)
return render(request, "blog/post_detail.html", {"post" : post, "comment" : comment})
def post_create(request):
if request.method == "POST":
form = PostForm(request.POST)
if form.is_valid():
post = form.save(commit=False)
post.author = request.user
post.save()
return redirect("post_detail", pk=post.pk)
else:
form = PostForm()
return render(request, "blog/post_create.html", {"form" : form})
models.py
from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
class Post(models.Model):
author = models.ForeignKey(User, on_delete=models.CASCADE)
title = models.CharField(max_length=250)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
published_date = models.DateTimeField(blank=True, null=True)
def publish(self):
self.published_date = timezone.now()
self.save()
def __str__(self):
return self.title
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name="comments")
author = models.CharField(max_length=250)
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
post_detail.html
{% extends 'blog/base.html' %}
{% block content %}
<div class="post">
{% if post.published_date %}
<div class="date">
{{ post.published_date }}
</div>
{% endif %}
<h2>{{ post.title }}</h2>
<p>{{ post.text|linebreaksbr }}</p>
</div>
<hr>
{% for comment in post.comments.all %}
<div class="comment">
<div class="date">{{ comment.created_date }}</div>
<strong>{{ comment.author }}</strong>
<p>{{ comment.text|linebreaks }}</p>
</div>
{% empty %}
<p>No comments here yet :(</p>
{% endfor %}
{% endblock %}
答案 0 :(得分:0)
不要使用get_object_or_404,它只会返回一个评论,而只是过滤出您的评论
1