首页 > 解决方案 > 在单个页面中使用具有不同 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'),
]

谢谢!

标签: djangodjango-formsdjango-views

解决方案


当前问题 - 添加后的页面刷新将相同的项目添加到列表中,每次请求后刷新页面。

如果您想避免每次操作后刷新页面,那么您必须从 Javascript 发送 AJAX 请求,并在 Django 中创建一些 AJAX 视图。

看看这篇文章:如何将 Ajax 与 Django 应用程序集成?


推荐阅读