【问题标题】:Page not found 404 No Blog matches the given query找不到页面 404 没有博客与给定的查询匹配
【发布时间】:2019-02-18 07:53:26
【问题描述】:

找不到页面 (404) 请求方法:GET 请求 URL: http://127.0.0.1:8000/like/?csrfmiddlewaretoken=UJ6I7mm2cjjSXK0MeuOLqm4E7OfMKTKtO461mCAsnTPdXT0UVw1z3JfMqijyIJAM&blog_id= 提出者:blog.views.like_post

没有博客与给定的查询匹配。


我正在为我的博客应用程序创建一个类似的部分,这个错误显示在下面是我的视图、模型和 urls 文件


views.py

from django.shortcuts import render,get_object_or_404
from django.views.generic import ListView
from .models import Blog

class BlogsList(ListView):
    model=Blog
    template_name='blog/home.html'
    context_object_name='blogs'
    ordering=['-date_posted']



def like_post(request):
    post= get_object_or_404(Blog, id=request.POST.get('blog_id'))
    post.likes.add(request.user)
    return HttpResponseRedirect(Blog.get_absolute_url())

models.py

from django.db import models
from django.utils import timezone
from django.contrib.auth.models import User
from django.urls import reverse 

class Blog(models.Model):
    title=models.CharField(max_length=100)
    content=models.TextField()
    date_posted=models.DateTimeField(default=timezone.now)
    author=models.ForeignKey(User, on_delete=models.CASCADE)
    likes=models.ManyToManyField(User,related_name='likes',blank=True)
    def __str__(self):
        return self.title

urls.py

from django.urls import path
from . import views 
from django.conf.urls import url

urlpatterns=[
path('',views.BlogsList.as_view(),name='blog-home'),
url(r'^like/$', views.like_post, name='like_post')
]

【问题讨论】:

  • 您检查使用 POST 方法发送的参数 blog_id。该错误表明您使用 GET 方法调用了 URL。因此不能有任何 POST 请求参数。找不到博客(request.POST.get('blog_id') 在这里可能是 None 或空字符串)并返回 404 NOT FOUND。
  • 实际上潜在的问题可能出在您的模板中。看起来您正在提交表单,但将其作为 GET 而不是 POST 发送。您应该显示该模板。

标签: python django


【解决方案1】:

你的视图函数like_post是这里的罪魁祸首。

like_post 应该使用 POST 方法调用并传递请求参数blog_id。我不知道你在哪里做这个。

建议你重写视图函数:

def like_post(request, blog_id):
    post = get_object_or_404(Blog, id=blog_id)
    # the rest can stay unchanged

并在urls.py 中更改以下行:

url(r'^like/$', views.like_post, name='like_post')

到:

path('<int:blog_id>/like/', views.like_post, name='like_post')

混合新的path 和旧的url 对我来说看起来不太好。现在您可以在 URL 中传递 blog_id,如果博客不存在,视图将返回 404 NOT FOUND。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2019-12-23
    • 2021-09-18
    • 2018-07-04
    • 2021-04-26
    相关资源
    最近更新 更多