问题:我正在尝试通过在浏览器中放置以下网址来获取详细信息视图(单个博客文章):
http://127.0.0.1:8000/post/1/
它应该在屏幕上检索并呈现第一篇博客文章,但是,出现以下错误:
Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/post/1/
Raised by: socialmedia.views.PostDetailView
No post found matching the query
更新,具体方法如下:Daniel Roseman的评论。我收到错误消息,说我没有ID为1的帖子,但显然我不理解帖子的实现,因为我假设创建帖子时会自动在数据库中为其分配ID。如果解决方案包含对我作为初学者的理解中所缺少的内容的清晰解释,将会很有帮助。
我已经看过管理员,点击进入帖子,也没有在任何地方找到ID号。
据我所知,我已经遍历代码并正确创建了视图,并且还具有应调用该视图的路由(以urls为单位)。
问题:有人可以指出错误吗?您还可以提供一个有用的解释来帮助您理解此特定示例(路由,查询匹配帖子等)
我看过类似的问题和答案,但无法完全找到解决方案。一个类似的问题表明可能与admin或路由有关,但在urls.py中使用了正则表达式,这表明Django的较旧版本对我没有用。
urls.py
#THIS IS THE SOCIAL MEDIA URLS ..not the root directory URLS
from django.contrib import admin
from django.urls import path
from . views import PostListView,PostDetailView
from . import views
urlpatterns = [
path('', PostListView.as_view(), name='socialmedia-home'),
path('post/<int:pk>/', PostDetailView.as_view(), name='post-detail'),
path('about/', views.about, name='socialmedia-about'),
]
views.py
from django.shortcuts import render
from .models import Post #import the Models Post
from django.views.generic import ListView,DetailView
from django.http import HttpResponse
# Create your views here.
class PostListView(ListView):
model = Post #what model to query in order to create the list
template_name = 'socialmedia/home.html' """<app>/<model>_<viewtype>.html
in this case would be socialmedia/post_detail.html
"""
context_object_name = 'posts'
ordering = ['-date_posted']
class PostDetailView(DetailView):
model = Post
def about(request):
return render(request,'socialmedia/about.html',{'title':'About'})
post_detail.html
{% extends "socialmedia/base.html" %}
{% block content %}
<article class="media content-section">
<img class="rounded-circle article-img" src="{{object.author.profile.image.url}}">
<div class="media-body">
<div class="article-metadata">
<a class="mr-2" href="#">{{ object.author }}</a>
<small class="text-muted">{{ object.date_posted|date:"F d, Y"}}</small>
</div>
<h2 class="article-title">{{ object.title }}</h2>
<p class="article-content">{{ object.content }}</p>
</div>
</article>
{% endblock content %}