【发布时间】:2021-06-23 10:37:59
【问题描述】:
我一直收到这个错误,我不知道我在代码中做错了什么,我检查了所有内容,但仍然无法弄清楚。我还尝试通过 id 获取数据库中的特定 post 对象,我的意思是在我的 views.py 的 post 函数中执行类似“post = Post.objects.get(id=id)”的操作,但我遇到了同样的错误。 任何帮助将不胜感激。
这是我的models.py
from django.db import models
from django.contrib.auth import get_user_model
from django.urls import reverse
User = get_user_model()
class Author(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
profile_pic = models.ImageField()
def __str__(self):
return self.user.username
class Category(models.Model):
name = models.CharField(max_length=50)
def __str__(self):
return self.name
class Post(models.Model):
title = models.CharField(max_length=200)
overview = models.CharField(max_length=200)
categories = models.ManyToManyField(Category)
author = models.ForeignKey(Author, on_delete=models.CASCADE)
comment_count = models.IntegerField(default=0)
views_count = models.IntegerField(default=0)
timestamp = models.DateTimeField(auto_now_add=True)
thumbnail = models.ImageField()
featured = models.BooleanField(default=False)
def __str__(self):
return self.title
def get_absolute_url(self):
return reverse('post-detail', kwargs={'id': self.id})
我的网址
from django.urls import path
from blog.views import home, blog, post
app_name = 'blog'
urlpatterns = [
path('', home, name='home-page'),
path('blog/', blog, name='blogs'),
path('post/<id>/', post, name='post-detail'),
]
我的 blog.html 模板
<div class="container">
<div class="row">
{% for post in queryset %}
<div class="post col-xl-6">
<div class="post-thumbnail">
<a href="post.html"><img src="{{post.thumbnail.url}}" alt="..." class="img-fluid"></a>
</div>
<div class="post-details">
<div class="post-meta d-flex justify-content-between">
<div class="category">
{% for cat in post.categories.all %}
<a href="#">{{cat}}</a>
{% endfor %}
</div>
</div>
<a href="{{post.get_absolute_url}}">
<h3 class="h4">{{post.title}}</h3>
</a>
<p class="text-muted">{{post.overview}}</p>
<footer class="post-footer d-flex align-items-center">
<a href="#" class="author d-flex align-items-center flex-wrap">
<div class="avatar">
<img src="{{post.author.profile_pic.url}}" alt="..." class="img-fluid">
</div>
<div class="title">
<span>{{post.author.user.username}}</span>
</div>
</a>
<div class="date"><i class="icon-clock"></i>{{post.timestamp|timesince}} ago</div>
<div class="comments meta-last"><i class="icon-comment"></i>{{post.comment_count}}</div>
</footer>
</div>
</div>
{% endfor %}
</div>
<!-- Pagination -->
<nav aria-label="Page navigation example">
<ul class="pagination pagination-template d-flex justify-content-center">
{% if queryset.has_previous %}
<li class="page-item">
<a href="?page={{queryset.previous_page_number}}" class="page-link">
<i class="fa fa-angle-left"></i>
</a>
</li>
{% endif %}
<li class="page-item"><a href="?page={{queryset.number}}" class="page-link active">{{queryset.number}}</a></li>
{% if queryset.has_next %}
<li class="page-item">
<a href="?page={{queryset.next_page_number}}" class="page-link">
<i class="fa fa-angle-right"></i>
</a>
</li>
{% endif %}
</ul>
</nav>
</div>
我的意见.py
from django.shortcuts import render, redirect
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from blog.models import Post, Category
from marketing.models import Signup
def home(request):
featured_posts = Post.objects.filter(featured=True)
latest_posts = Post.objects.order_by('-timestamp')[:3]
if request.method == 'POST':
email = request.POST['email']
new_signup = Signup()
new_signup.email = email
new_signup.save()
context = {
'featured_posts': featured_posts,
'latest_posts': latest_posts
}
return render(request, 'index.html', context)
def blog(request):
post_list = Post.objects.all()
latest_posts = Post.objects.order_by('-timestamp')[:3]
categories = Category.objects.all()
paginator = Paginator(post_list, 4)
page_number = request.GET.get('page')
try:
queryset = paginator.get_page(page_number)
except PageNotAnInteger:
queryset = paginator.get_page(1)
except EmptyPage:
queryset = paginator.get_page(paginator.num_pages)
context = {
'post_list': post_list,
'queryset': queryset,
'latest_posts': latest_posts,
'categories': categories,
}
return render(request, 'blog.html', context)
def post(request, id):
context = {}
return render(request, 'post.html', context)
【问题讨论】:
标签: python-3.x django django-models django-views django-templates