Страница не найдена - Текущий путь, совпадает с последним.
Я создал представление обновления. Я хочу добавить кнопку в пост, которая направляет к представлению обновления. Однако при нажатии на кнопку вы получаете эту ошибку.
404 Page not found
post/<int:pks>/build-log/<int:pk>/update/ [name='build-log-update']
post/75/build-log/127/update/, matched the last one.`
Причина возникновения этой ошибки заключается в том, что при нажатии на кнопку происходит переворачивание PK.
Пример.
/post/127/build-log/75/
после нажатия кнопки /post/75/build-log/127/update/
вы видите, что она переворачивает PK.
Если просто добавить update
к хорошему url, он работает нормально.
Я не могу понять, почему он переворачивает pks
html:
<a class="delete-btn" href='{% url "build-log-delete" pk=log.post_id pkz=log.pk %}'>Delete</a>
<a class="update-btn" href='{% url "build-log-update" pk=log.post_id pkz=log.pk %}'>Update</a>
Урлы:
path('post/<int:pk>/build-log/<int:pkz>/', views.BuildLogDisplay, name='build-log-view'),
path('post/<int:pk>/build-log/<int:pkz>/delete/', views.BuildLogDelete, name='build-log-delete'),
path('post/<int:pks>/build-log/<int:pk>/update/', UpdateBuildLog.as_view(), name='build-log-update')
модель:
class BuildLog(models.Model):
title = models.CharField(max_length=100)
content = RichTextUploadingField(blank=True, null=True)
date_posted = models.DateTimeField(default=timezone.now)
author = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey('Post', on_delete=models.CASCADE)
def get_absolute_url(self):
return reverse('build-log-view', kwargs={'pkz': self.pk})
view:
class UpdateBuildLog(LoginRequiredMixin, UserPassesTestMixin, UpdateView):
model = BuildLog
form_class = BuildLogupdateForm
template = 'blog/buildlog_update.html'
def form_valid(self, form):
form.instance.author = self.request.user
return super().form_valid(form)
def test_func(self):
post = self.get_object()
if self.request.user.id == post.author_id:
return True
return False
Урл базового поста и урл удаления имеют pk
в качестве первого захваченного значения, а урл обновления имеет pk
в качестве второго захваченного значения.
'post/<int:pk>/build-log/<int:pkz>/'
'post/<int:pk>/build-log/<int:pkz>/delete/'
'post/<int:pks>/build-log/<int:pk>/update/'
Мне пришлось передать это в представление.
def get_object(self):
return BuildLog.objects.get(pk=self.kwargs["pkz"])