#django
#django
Вопрос:
Я создал типовое объявление в models.py файл
class Announcement(models.Model):
title = models.CharField(max_length=30)
content = models.TextField()
date_posted = models.DateTimeField(default=timezone.now)
teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)
def __str__(self):
return self.title
И для удаления записи объявления я создал следующее представление
def AnnouncementDelete(request, pk):
announcement = get_object_or_404(Announcement, pk=pk)
if request.method=='POST':
announcement.delete()
return redirect('/')
return render(request, 'classroom/announcement_confirm_delete.html', {'announcement': announcement})
Вид удаления объявления (то есть AnnouncementDelete) имеет следующий URL
path("delete/<int:pk>/", view=views.AnnouncementDelete, name="AnnouncementDelete"),
Если я войду
http://127.0.0.1:8000/classroom/delete/3
в браузере удаляется Объявление, имеющее значение pk = 3
Теперь я хочу, чтобы кнопка напрямую удаляла мою запись без необходимости ввода http://127.0.0.1:8000/classroom/delete/3
текста в браузере. Я попробовал следующие методы в моем allannouncement.html файл
{% extends "classroom/base.html" %}
{% block content %}
<h1>Announcements</h1>
{% for announcement in announcements %}
<!-- starting loop (posts is keyword from view) -->
<div style="border-style: solid;">
{% if announcement.teacher.user == request.user %}
<div>
<a href="{% url 'classroom:AnnouncementDelete' %}">Delete</a>
</div>
{% endif %}
{{ announcement.pk }}
<a class="mr-2">Posted by: {{ announcement.teacher }}</a>
<h2><a class="article-title">{{ announcement.title }}</a></h2>
<p class="article-content">{{ announcement.content}}</p>
</div>
{% endfor %}
{% endblock content %}
но это выдает следующую ошибку
NoReverseMatch at /classroom/allannouncement/
Reverse for 'AnnouncementDelete' with no arguments not found. 1 pattern(s) tried: ['classroom/delete/(?P<pk>[0-9] )/
затем я также попытался передать pk с URL, например
<a href="{% url 'classroom:AnnouncementDelete' , pk=announcement.pk %}">Delete</a>
Но он выдает следующую ошибку
TemplateSyntaxError at /classroom/allannouncement/
Could not parse the remainder: ',' from ','
Комментарии:
1. вы используете метод post, не забудьте включить кнопку в тип формы post или удалить проверку для метода post в представлении announcementdelete
Ответ №1:
вместо ссылки добавьте форму. Добавить
{% load crispy_forms_tags %}
в вашем HTML-файле, а затем добавьте
{% if announcement.teacher.user == request.user %}
<div>
<form action="{% url 'classroom:AnnouncementDelete' announcement.id %}"
method="post">
{% csrf_token %}
<input type="submit" value="Delete">
</form>
</div>
{% endif %}
Ответ №2:
Удалить общее #обратитесь к этому
<a href="{% url 'classroom:AnnouncementDelete' pk=announcement.pk %}">Delete</a>
]
затем я также попытался передать pk с URL, например
Но он выдает следующую ошибку
Комментарии:
1. вы используете метод post, не забудьте включить кнопку в тип формы post или удалить проверку для метода post в представлении announcementdelete
Ответ №1:
вместо ссылки добавьте форму. Добавить
в вашем HTML-файле, а затем добавьте
Ответ №2:
Удалить общее #обратитесь к этому