python - 试图更新数据库中的帖子。但是找不到页面(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
解决方案
您的 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'),
或者
您可以更改action
HTML 表单上的属性:
{% 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 %}
推荐阅读
- python - CV2 在编译成 EXE 时抛出错误,而不是在自编译时
- mysql - 如何将约束添加到 MYSQL 中的列仅以保存已存在于同一表的另一列中的值?
- computer-vision - 从图像匹配路线图
- ruby-on-rails - Rails 模型只接受 0 到 1 之间的浮点数
- java - 用于员工经理搜索的二叉搜索树
- c++ - 是否可以在编译时初始化数组,以便在运行时不需要时间?
- html - 如何在不使用容器元素的情况下实现这种响应式设计?
- excel - 随着时间的推移,将单元格导出为 Excel
- sql - 在 C# 和 EF Core 中播种多对多数据库
- azure - 在 Azure 数据工厂中创建触发器期间使用参数定位文件