【发布时间】: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 发送。您应该显示该模板。