&引用;与查询匹配的帖子不存在。”;导航到“时出错”;管理页面";在django?

&引用;与查询匹配的帖子不存在。”;导航到“时出错”;管理页面";在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

我正在学习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
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