如何解决我的项目博客文章对象中不可迭代的这种类型错误



这是我的视图.py。我怀疑我需要创建另一个模型来处理条目。但我认为这是不必要的。

from django.shortcuts import render, redirect
from . models import BlogPost
def index(request):
return render(request, 'blogs/index.html')
def posts(request):
'''displays all blogs'''
all_posts = BlogPost.objects.order_by('-date_added')
context = {
'posts': all_posts
}
return render(request, 'blogs/all_posts.html', context)
def post (request, posts_id):
single_post = BlogPost.objects.get(id = posts_id)
context = {
'single_post':single_post
}
return render(request, 'blogs/post.html', context)

这是我的html文件

{% extends "blogs/base.html" %}
{% block body %}
<h1>Posts</h1>
{% for posts in single_post %}
<h3>{{posts.title}}</h3>
<p>{{posts.text}}</p>
<p>{{posts.date_added}}</p>
{% endfor %}
{% endblock body %}

这是我的urls.py

from django.urls import path
from . import views
app_name = 'blogs'
urlpatterns = [
path('all_posts/<int:posts_id>/', views.post, name = 'post'),
path('all_posts/', views.posts, name = 'all_posts'),
path('', views.index, name = 'index'),

这是我对该项目的模型定义。各种字段已正确定义

from django.db import models
class BlogPost(models.Model):
title = models.CharField(max_length = 150)
text = models.TextField()
date_added = models.DateField(auto_now=False, auto_now_add=True)
def __str__(self):
return f'{self.title}'
class Meta:
db_table = 'Blog_Post'
managed = True
verbose_name = 'BlogPost'
verbose_name_plural = 'BlogPosts'

您不能在Django 中迭代对象

由于get方法返回单个对象而不是queryset

试试这个

{% extends "blogs/base.html" %}
{% block body %}
<h1>Posts</h1>

<h3>{{single_post.title}}</h3>
<p>{{single_post.text}}</p>
<p>{{single_post.date_added}}</p>

{% endfor %}
{% endblock body %}

阅读此https://docs.djangoproject.com/en/3.1/ref/models/querysets/#django.db.models.query.QuerySet.get

{% extends "blogs/base.html" %}
{% block body %}
<h1>Posts</h1>
{% for single_post  in posts %}
<h3>{{single_post.title}}</h3>
<p>{{single_post.text}}</p>
<p>{{single_post.date_added}}</p>
{% endfor %}
{% endblock body %}

最新更新