【发布时间】:2021-11-02 14:41:21
【问题描述】:
我正在尝试从我的日历中删除一个事件的实例。然后我希望 Django 在删除事件后重定向到日历页面。
在我的views.py中,我定义了一个event_delete函数:
def event_delete(request, event_id=None):
Event.objects.get(pk=event_id).delete()
return HttpResponseRedirect(reverse("cal:calendar"))
在我的 urls.py 中,我定义了一个要删除的 url:
from django.conf.urls import url
from . import views
app_name = "cal"
urlpatterns = [
url(r"^index/$", views.index, name="index"),
url(r"^calendar/$", views.CalendarView.as_view(), name="calendar"),
url(r"^event/new/$", views.event, name="event_new"),
url(r"^event/edit/(?P<event_id>\d+)/$", views.event, name="event_edit"),
url(r"^event/delete/$", views.event_delete, name="event_delete"),
]
在我的 event.html 中,我定义了一个接受 event_delete 的标签:
<a class="btn cancel-button buttons login_btn" href="{% url 'cal:event_delete' %}" value="Delete" style="font-family:Optima;">Delete Event</a>
当我尝试删除活动时,它会将我重定向回日历页面,但我仍然可以看到该活动。如果我再试一次,它会给我错误
DoesNotExist at /event/delete/
Event matching query does not exist.
但是,当我签入我的管理员时,我仍然看到该事件的实例。请建议我如何解决这个问题。
编辑:这就是我的 event.html 的样子:
{% extends 'cal/base.html' %}
{% block title %}
Event
{% endblock %}
{% block content %}
<!--<div class="clearfix">
<a class="btn btn-info left" href="{% url 'cal:calendar' %}"> Calendar </a>
</div>-->
{% if form.errors %}
{% for field in form %}
{% for error in field.errors %}
<div class="alert alert-danger">
{{ field.label }} <strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endfor %}
{% for error in form.non_field_errors %}
<div class="alert alert-danger">
{{ field.label }} <strong>{{ error|escape }}</strong>
</div>
{% endfor %}
{% endif %}
<div class="container h-100">
<div class="d-flex justify-content-center h-100">
<div class="user_card">
<div class="d-flex justify-content-center">
<h3 id="form-title">Add Event</h3>
</div>
<div class="d-flex justify-content-center form_container">
<form method="POST" action="">
{% csrf_token %}
<div class="input-group mb-3">
{{ form.title }}
</div>
<div class="mb-3 description">
{{ form.description }}
</div>
<div class="start_and_end_time">
<span class="timelabel">Start</span>
{{ form.start_time }}
<span class="spacer"></span>
<span class="timelabel">End</span>
{{ form.end_time }}
</div>
<div class="d-flex justify-content-center mt-3 login_container">
<a class="btn cancel-button buttons login_btn" href="{% url 'cal:calendar' %}" value="Cancel" style="font-family:Optima;">Cancel</a>
<a class="btn cancel-button buttons login_btn" href="{% url 'cal:event_delete' form.id%}" value="Delete" style="font-family:Optima;">Delete Event</a>
<span class="spacer"></span>
<input class="btn buttons add-button login_btn" type="submit" value="Add Event" style="font-family:Optima;">
</div>
</form>
</div>
</div>
</div>
</div>
{% endblock %}
【问题讨论】:
-
您的 urlpatterns 不接受 event_delete 中的 id 并且您的模板不提供。您需要传递类似于 event_edit 的 id。您还应该为此使用 post 方法,但一次一步。见文档docs.djangoproject.com/en/3.2/ref/templates/builtins/#url
标签: python-3.x django