Я создаю простую социальную сеть в django.
В «доме» моей социальной сети у меня есть список всех сообщений, опубликованных всеми пользователями, с указанием автора и даты публикации. Под каждым сообщением зарегистрированного пользователя появляется кнопка «Удалить». Если пользователь щелкает по нему, он должен вернуть определенный c вид этого сообщения с сообщением типа "действительно ли вы sh хотите удалить это сообщение?"
Однако, когда я нажимаю на это, код возвращает эту ошибку:
NoReverseMatch в / posts / delete / 7 /
Обратное для 'single' без аргументов не найдено. Попробован 1 шаблон (ов): ['posts / by / (? P [- \ w] +) / (? P \ d +) / $']
Почему он говорит, что не может получить обратное для 'single' без аргументов, в то время как в шаблоне кнопка удаления имеет ссылку на функцию просмотра 'delete'?
Вот мой urls.py, внутри urlpatterns:
url(r'^$',
views.PostList.as_view(),
name='all'),
url(r'new/$',
views.CreatePost.as_view(),
name='create'),
url(r'by/(?P<username>[-\w]+)/$',
views.UserPosts.as_view(),
name='for_user'),
url(r'by/(?P<username>[-\w]+)/(?P<pk>\d+)/$',
views.PostDetail.as_view(),
name='single'),
url(r'delete/(?P<pk>\d+)/$',
views.DeletePost.as_view(),
name='delete'),
Вот мои views.py:
class DeletePost(LoginRequiredMixin, SelectRelatedMixin, generic.DeleteView):
model = models.Post
select_related = ('user', 'group')
success_url = reverse_lazy('posts:all')
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(user_id = self.request.user.id)
def delete(self,*args,**kwargs):
messages.success(self.request,'Post Deleted')
return super().delete(*args,**kwargs)
Вот мой шаблон, в котором появляется кнопка удаления:
{% if user.is_authenticated and post.user.username == user.username %}
<a href="{% url 'posts:delete' pk=post.pk %}" title="delete" class="btn btn-simple">
<span class="glyphicon glyphicon-remove text-danger" aria-hidden="true"></span>
<span class="text-danger icon-label">Delete</span>
</a>
{% endif %}
EDIT:
Вот мой шаблон, показывающий сообщение и спрашивающий пользователя, действительно ли он / она хочет удалить его:
<h3>Do you want to delete this post?</h3>
<div class="posts">
{% include "posts/_post.html" with post=object hide_delete=True %}
</div>
<form class="POST">
{% csrf_token %}
<input type="submit" value="Confirm Delete" class="btn btn-danger btn-large">
<a href="{% url 'posts:single' username=user.username pk=object.pk %}"
class="btn btn-simple btn-large btn-default">Cancel</a>
</form>
Модель User
по умолчанию django models.User
Примечание. Ранее я сталкивался с подобной ошибкой, связанной с использованием выражений регулярных выражений. Более подробную информацию можно найти в этом другом вопросе .