Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 单击即可删除对象_Python_Django - Fatal编程技术网

Python 单击即可删除对象

Python 单击即可删除对象,python,django,Python,Django,我正在尝试制作一个todo应用程序,我有一个带有表格的表单,用户可以在此表单中添加“todo” 我希望能够通过单击按钮从数据库中删除添加的“todo”,而不必将用户重定向到另一个页面,使用Django有什么方法可以做到这一点吗 Views.py from django.shortcuts import render from django.utils import timezone from .models import Task from .forms import TaskForm fro

我正在尝试制作一个todo应用程序,我有一个带有表格的表单,用户可以在此表单中添加“todo”

我希望能够通过单击按钮从数据库中删除添加的“todo”,而不必将用户重定向到另一个页面,使用Django有什么方法可以做到这一点吗

Views.py

from django.shortcuts import render
from django.utils import timezone
from .models import Task
from .forms import TaskForm
from django.shortcuts import redirect
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404
from django.core.urlresolvers import reverse

# Create your views here.

def tasks_list(request):
    tasks = Task.objects.filter(created_date__lte=timezone.now()).order_by('created_date')
    form = TaskForm()
    if request.method == "POST":
        form = TaskForm(request.POST)
        if form.is_valid():
            post = form.save(commit=False)
            post.created_date = timezone.now()
            post.save()
            #return render(request, 'todo/tasks_list.html', {'tasks': tasks, 'form': form})
            return HttpResponseRedirect('/')
    else:
        form = TaskForm()
    return render(request, 'todo/tasks_list.html', {'tasks': tasks, 'form': form})




def post_remove(request, new_id):
    post = get_object_or_404(Task, id=new_id)
    post.delete()
    return redirect('todo.views.tasks_list')
def post_remove(request, pk):
    post = get_object_or_404(Task, pk=pk)
    post.delete()
    return HttpResponseRedirect('/')
url.py

from django.conf.urls import url
from . import views

urlpatterns = [
    url(r'^$', views.tasks_list, name='tasks_list'),
    #url(r'^$', views.tasks_list, name='post_remove'),
]
form.py

from django import forms
from .models import Task

class TaskForm(forms.ModelForm):
    title = forms.CharField(widget=forms.TextInput(attrs={'placeholder': 'Add todo'}), label='')
    due_date = forms.DateField(widget=forms.DateInput(attrs={'placeholder': 'Add due date', 'class':'datepicker'}), label='')

    class Meta:
        model = Task
        fields = ('title', 'due_date',)
模板/任务列表.html

{% extends 'todo/base.html' %}
{% load bootstrap %}

{% block content %}
<h1>Todos</h1>
<div class="container" id="container">
  <div class="input-group">
    <!--<input type="text" class="form-control" id="textField" placeholder="Add tasks">-->
    <form method="POST" class="post-form" >{% csrf_token %}
      {{ form|bootstrap }}

      <span class="input-group-btn">
        <button class="btn btn-default" type="submit" id="plusSign">Go!</button>
      </span>
      </form>
  </div><!-- /input-group -->
  <table style="width:100%" id='todoTable'>
    <thead id="tableHead">
      <tr>
        <td>Todo</td>
        <td>due date</td>
        <td>delete</td>
      </tr>
    </thead>
    <tbody>
    {% for task in tasks %}
    <tr>
      <td>{{ task.title }}</td>
      <td> {{ task.due_date }} </td>
      <td> <a class="btn btn-default" href="{% url 'tasks_list' %}"><span class="glyphicon glyphicon-remove"></span></a> </td>
    </tr>
  </body>
    {% endfor %}
  </table>
</div>
{% endblock %}
<td> <a class="btn btn-default" href="{% url 'post_remove' pk=task.pk %}"><span class="glyphicon glyphicon-remove"></span></a></td>
Url.py

url(r'^task/(?P<pk>\d+)/remove/$', views.post_remove, name='post_remove'),
url(r'^task/(?P\d+)/remove/$,views.post\u remove,name='post\u remove'),
模板/task_list.html

{% extends 'todo/base.html' %}
{% load bootstrap %}

{% block content %}
<h1>Todos</h1>
<div class="container" id="container">
  <div class="input-group">
    <!--<input type="text" class="form-control" id="textField" placeholder="Add tasks">-->
    <form method="POST" class="post-form" >{% csrf_token %}
      {{ form|bootstrap }}

      <span class="input-group-btn">
        <button class="btn btn-default" type="submit" id="plusSign">Go!</button>
      </span>
      </form>
  </div><!-- /input-group -->
  <table style="width:100%" id='todoTable'>
    <thead id="tableHead">
      <tr>
        <td>Todo</td>
        <td>due date</td>
        <td>delete</td>
      </tr>
    </thead>
    <tbody>
    {% for task in tasks %}
    <tr>
      <td>{{ task.title }}</td>
      <td> {{ task.due_date }} </td>
      <td> <a class="btn btn-default" href="{% url 'tasks_list' %}"><span class="glyphicon glyphicon-remove"></span></a> </td>
    </tr>
  </body>
    {% endfor %}
  </table>
</div>
{% endblock %}
<td> <a class="btn btn-default" href="{% url 'post_remove' pk=task.pk %}"><span class="glyphicon glyphicon-remove"></span></a></td>

有人能检查一下我对删除的理解是否正确吗


因此,
task\u list.html
正在为每个todo添加一个主键为
href=“/task/49/remove/”
的链接,该链接允许
views.py
中的post\u remove函数仅删除“todo”使用特定的href,由于post_remove功能中的请求参数,只有在单击按钮时删除才有效?

是。使用ajax,只需简单地调用delete视图,就可以点击数据库并删除条目。只需使用javascript在客户端删除它

或者你可以考虑使用WITH,这样就不会重新发明轮子,增加一些灵活性来进一步改进你的应用程序。您可以添加回调以确保服务器端一切正常


如果你想走到最前沿,你可以去看看。

谢谢你的回答!你能看一下我的编辑吗?看一下你的代码,它看起来是正确的,但是当你点击链接时,它会将用户重定向到
'/'
url。您的问题不是直接针对在不重新加载页面的情况下删除
任务