django - 在单个页面中使用具有不同 url 的多个 POST 请求
问题描述
我正在尝试为每个待办事项构建一个带有添加/删除和完成按钮的待办事项列表。我使用了多种表单和 POST 请求来使其工作。有没有更好的解决方案来实现这一目标?
当前问题 - 添加后的页面刷新将相同的项目添加到列表中,每次请求后刷新页面。
视图.py
from django.shortcuts import render, redirect
from .models import *
from .forms import ListForm
# Create your views here.
def homePage(request):
list = List.objects.all()
form = ListForm()
if request.method == 'POST':
form = ListForm(request.POST)
if form.is_valid():
form.save()
context = {'list': list, 'form': form}
return render(request,'todoList/home.html',context)
def deleteList(request,pk):
list = List.objects.get(id=pk)
if request.method == 'POST':
list.delete()
return redirect('/')
def completed(request,pk):
list = List.objects.get(id=pk)
if request.method == 'POST':
print(list.completed)
if list.completed == False:
list.completed = True
else:
list.completed = False
list.save()
return redirect('/')
html
<h2>Todo list</h2>
{% for listItem in list %}
<div class="row">
<form class="bottomCont" action=" {% url 'delete_list' listItem.id %} " method="POST">
{% csrf_token %}
<div class="col-sm-3">
<h4>{{ listItem }}</h2>
</div>
<div class="col-sm-1">
<p>{{ listItem.completed }}</p>
</div>
<div class="col-sm-2">
<p>{{ listItem.date_added }}</p>
</div>
<div class="col-sm-1">
<button type="submit" class="btn btn-danger">Delete</button>
</div>
</form>
</div>
<form action=" {% url 'completed' listItem.id %}" method="POST">
{% csrf_token %}
<div class="col-sm-1">
<button type="submit" class="btn btn-success">Completed</button>
</div>
</form>
</form>
{% endfor %}
<form action="" method="POST">
<div>
{% csrf_token %}
{{ form }}
<button type="submit" class="btn btn-success">Add</button>
</div>
</form>
网址.py
from django.urls import path
from . import views
urlpatterns = [
path('',views.homePage, name='home'),
path('delete_list/<int:pk>/',views.deleteList, name='delete_list'),
path('completed_list/<int:pk>/',views.completed, name='completed'),
]
谢谢!
解决方案
当前问题 - 添加后的页面刷新将相同的项目添加到列表中,每次请求后刷新页面。
如果您想避免每次操作后刷新页面,那么您必须从 Javascript 发送 AJAX 请求,并在 Django 中创建一些 AJAX 视图。
看看这篇文章:如何将 Ajax 与 Django 应用程序集成?
推荐阅读
- python - 提取字节文本文件中两个字符之间的字符串,Python
- java - Flyway、Spring Boot 和应用程序在没有数据库的情况下启动
- android - 如何在 RecyclerView SelectionTracker 中禁用拖动以进行选择?
- laravel - laravel-image-optimizer 与 spatie/browsershot 冲突
- mysql - 如何在排序的顶部获得 NULL?
- java - 为什么无头 NetLogo 模拟在高端计算机集群上的运行速度比在我的台式机上慢?
- android - 当您拥有所有客户端、授权服务器和受保护的 API 时的 OAuth
- kubernetes - 如何使用 k8s client-go 获取 GKE 工作节点的新列表
- image - 即使在标准示例中,暗流边界框也很糟糕
- azure-sql-database - Azure ADF 无法在不同的租户或订阅中创建与 Azure SQL 服务器 VM 的链接服务