首页 > 解决方案 > 试图更新数据库中的帖子。但是找不到页面(404)?想知道如何更新数据库中的数据?

问题描述

我正在尝试使用 django 创建一个博客应用程序。当点击一个帖子时,它会在单独的页面中显示该帖子。我创建了编辑和删除选项。当我点击编辑时,它返回编辑选项。但是当我更改一些内容时并单击更新它返回页面未找到错误。

 #urls.py
 from django.urls import path,include
 from . import views

 urlpatterns=[
    path('',views.homepage),
    path('register',views.register,name='register'),
    path('login',views.login,name='login'),
    path('logout',views.logout,name='logout'),
    path('newpost',views.newpost,name="newpost"),
    path('<int:pk>', views.post_detail, name='post_detail'),
    path('<int:pk>/edit', views.edit, name='edit'),
    path('update', views.update, name='update'),
 ]

 <!---update.html page--->
  {% extends 'layout.html' %}
  {% block content %}
  <div class="box">
   <form action="updated" method="POST">
     {% csrf_token %}
     <h3>Title of  Post</h3>
     <input type="text" maxlength="100" name="title" class="inputvalues" 
                                           value={{post.title}}>
     <h3>Description</h3>
     <textarea name="desc" style="width: 500px;margin: 0 auto;padding: 
                         5px;height:40%" >{{post.desc}}</textarea>
     <a href="update"></a>
          <button type="submit" id="lg" >Update</button>
    </a>
   </form>
  </div>
  {% endblock %}

   #views.py
    def edit(request,pk):
       post=Post.objects.get(pk=pk)
       return render(request,'update.html',{'post': post})

    def update(request):
       post=Post.objects.get(pk=pk)
       title=request.POST['title']
       desc=request.POST['desc']
       update = 
          Post(title=title,desc=desc,author_id=request.user.username)
       update.title= title
       update.desc= desc
       update.save();
       return redirect('indpost.html')

显示单个帖子的网址是http://127.0.0.1:8000/48其中 48 是 pk_id 当我点击编辑时的网址是http://127.0.0.1:8000/48/edit 当我点击更新时的网址是http://127.0.0.1:8000/48/updated

标签: pythondjango

解决方案


您的 urlpattern 有一个错字:

urlpatterns=[
    path('',views.homepage),
    path('register',views.register,name='register'),
    path('login',views.login,name='login'),
    path('logout',views.logout,name='logout'),
    path('newpost',views.newpost,name="newpost"),
    path('<int:pk>', views.post_detail, name='post_detail'),
    path('<int:pk>/edit', views.edit, name='edit'),
    path('update', views.update, name='update'),
 ]

最后path()应该是这样的:

path('updated', views.update, name='update'),

或者

您可以更改actionHTML 表单上的属性:

  {% extends 'layout.html' %}
  {% block content %}
  <div class="box">
   <form action="update" method="POST">
     {% csrf_token %}
     <h3>Title of  Post</h3>
     <input type="text" maxlength="100" name="title" class="inputvalues" 
                                           value={{post.title}}>
     <h3>Description</h3>
     <textarea name="desc" style="width: 500px;margin: 0 auto;padding: 
                         5px;height:40%" >{{post.desc}}</textarea>
     <a href="update"></a>
          <button type="submit" id="lg" >Update</button>
    </a>
   </form>
  </div>
  {% endblock %}

推荐阅读