&引用;与查询匹配的帖子不存在。”;导航到“时出错”;管理页面";在django?
我正在学习Django,并致力于制作一个简单的博客网站。现在整个项目工作正常,但每当我导航到管理面板时,它就会显示错误“Posts matching query note exists” 让我知道您希望看到代码的哪一部分(我不知道哪个文件有错误) 错误:&引用;与查询匹配的帖子不存在。”;导航到“时出错”;管理页面";在django?,django,python-3.x,Django,Python 3.x,我正在学习Django,并致力于制作一个简单的博客网站。现在整个项目工作正常,但每当我导航到管理面板时,它就会显示错误“Posts matching query note exists” 让我知道您希望看到代码的哪一部分(我不知道哪个文件有错误) 错误: Environment: Request Method: GET Request URL: http://127.0.0.1:8000/admin Django Version: 2.0.5 Python Version: 3.6.5 Ins
Environment:
Request Method: GET
Request URL: http://127.0.0.1:8000/admin
Django Version: 2.0.5
Python Version: 3.6.5
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'posts']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Traceback:
File "C:\Users\Fruity_Dude\AppData\Local\Programs\Python\Python36\lib\site-
packages\django\core\handlers\exception.py" in inner
35. response = get_response(request)
File "C:\Users\Fruity_Dude\AppData\Local\Programs\Python\Python36\lib\site-
packages\django\core\handlers\base.py" in _get_response
128. response = self.process_exception_by_middleware(e,
request)
File "C:\Users\Fruity_Dude\AppData\Local\Programs\Python\Python36\lib\site-
packages\django\core\handlers\base.py" in _get_response
126. response = wrapped_callback(request, *callback_args,
**callback_kwargs)
File "C:\Users\Fruity_Dude\Projects\Django\devflow\posts\views.py" in
post_details
10. posts = Posts.objects.get(slug=slug)
File "C:\Users\Fruity_Dude\AppData\Local\Programs\Python\Python36\lib\site-
packages\django\db\models\manager.py" in manager_method
82. return getattr(self.get_queryset(), name)(*args,
**kwargs)
File "C:\Users\Fruity_Dude\AppData\Local\Programs\Python\Python36\lib\site-
packages\django\db\models\query.py" in get
403. self.model._meta.object_name
Exception Type: DoesNotExist at /admin
Exception Value: Posts matching query does not exist.
URL.py:
from django.urls import path
from . import views
app_name = 'posts'
urlpatterns = [
path('', views.posts, name='home'),
path('<slug:slug>', views.post_details, name='detail'),
]
mainurl.py:
from django.contrib import admin
from django.urls import path,include
from . import views
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static
from django.conf import settings
urlpatterns = [
path('admin/', admin.site.urls), #for admin
path('', include('posts.urls')),
path('about/', views.about, name='about'), #for about
path('contact/', views.contact, name='contact'), #for contact
path('support/', views.support, name='support'), #for support
path('donate/', views.donate, name='donate') #for donate
]
urlpatterns += staticfiles_urlpatterns()
urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
问题似乎是你在跑步
posts = Posts.objects.get(slug=slug)
你的url会被捕获
path('<slug:slug>', views.post_details, name='detail')
修正了这个问题。这可能是因为后面的/
现在不包括在生成的slug
变量中
Posts.objects.get(slug=slug)
会引发此错误,因为.get
-方法要求匹配一行且仅匹配一行。()
为了避免这个问题,我认为应该实施两种解决方案
路径('/',views.post_details,name='detail')
,即添加了一个/
李>
posts = Posts.objects.filter(slug=slug).all() # all() to make django perform the sql select command and return list
if not posts:
# handle error case, either return 404 or redirect somewhere.
elif len(posts) > 1:
# handle the weird case when there was more than one matching post
post = posts[0]
# render using post instead of posts, since it is only one post
您需要显示您的URL.py。post_details视图正在捕获您的管理路径,下次,请单击“切换到复制和粘贴视图”并发布错误文本,而不是发布屏幕截图。明白了,谢谢。我要编辑这篇文章@DanielRosemanNo这是您需要显示的主要URL。哦,主要URL!对不起,这可能是问题所在。那么,我还能做些什么来代替
Posts.objects.get(slug=slug)
。我添加了一些建议
url(r'^(?P<slug>[\w-]+)/$', views.post_details, name='detail')
posts = Posts.objects.filter(slug=slug).all() # all() to make django perform the sql select command and return list
if not posts:
# handle error case, either return 404 or redirect somewhere.
elif len(posts) > 1:
# handle the weird case when there was more than one matching post
post = posts[0]
# render using post instead of posts, since it is only one post