Обратный с "" нет аргумента Не найдено. Django (NoReverseMatchError - PullRequest
1 голос
/ 26 апреля 2020

Я новичок в django. У меня проблема с удаленным представлением на основе классов, так как он возвращает ошибку без обратного соответствия. В конце URL-адреса указан символ доллара.

Это ошибка:

NoReverseMatch at /posts/myhome/
Reverse for 'delete_post' with no arguments not found. 1 pattern(s) tried: ['posts/(?P<slug>[^/]+)/delete$']

views.py

class DeletePostView(BSModalDeleteView, LoginRequiredMixin, UserPassesTestMixin):
model = Post
success_url = reverse_lazy('posts:myhome')
template_name = 'posts/delete_post.html'

def test_func(self):
    post = self.get_object()
    if self.request.user == post.user:
        return True
    return False

html код:

 <div class="content-section">
    <form method="POST">
        {% csrf_token %}
        <div class="modal-body">
        <fieldset class="form-group">
            <legend class="border-bottom mb-4" style="text-align: center;">Delete Post</legend>
            <h4 style="text-align: center;">Are you sure you want to delete this post?</h4>
        </fieldset>
        <div class="form-group" style="text-align: center;">
            <button class="btn btn-sm btn-outline-danger" type="submit">Yes, Delete</button>
           %}">Cancel</a> -->
        </div>
        </div>
    </form>
</div>

urls.py

urlpatterns = [
path('myhome/', HomePostListView.as_view(), name='myhome'),
path('create/', CreatePostView.as_view(), name='create_post'),
path('<slug>/', views.detail_post, name='detail_post'),
path('<slug>/update', views.update_post, name='update_post'),
path('<slug>/delete', DeletePostView.as_view(), name='delete_post'),]

Ответы [ 2 ]

0 голосов
/ 27 апреля 2020

Это не из-за этих кодов или не из-за kwargs. Возникла проблема с javascript в myhome. html, которую я изменил, и все вернулось к норме.

и спасибо за помощь!

0 голосов
/ 27 апреля 2020

Во-первых, я хотел бы приветствовать вас на ТАК! Я тоже новичок в этой платформе, поэтому я понимаю, откуда ты. Я хотел бы обратить ваше внимание на форматирование кода HTML, а именно %}">Cancel</a> -->", который находится у вас под кнопкой отправки. Я не думаю, что это проблема здесь, но это то, что могло быть ошибочно скопировано.

Во-вторых, было бы очень полезно понять регулярное выражение шаблона URL django: Django Таблица регулярных выражений Url Источник изображения: https://www.webforefront.com/django/regexpdjangourls.html

Это полезно для объяснения того, почему в выводе ошибки отображается знак доллара в конце этой попытки реверса, поскольку он отмечает конец строки для шаблона регулярного выражения, который использует reverse_lazy.

Суть Похоже, что ваша проблема проистекает из того факта, что вы не передаете аргумент представлению delete_post, так как для этого требуется слаг.

Документы Django 2.2 для состояния обратной функции: если URL принимает аргументы, вы можете передавать их в аргументах. Например:

from django.urls import reverse

def myview(request):
    return HttpResponseRedirect(reverse('arch-summary', args=[1945]))

Вы также можете передавать kwargs вместо args. Например:

>>> reverse('admin:app_list', kwargs={'app_label': 'auth'})
'/admin/auth/'

Вам нужно передать фрагмент сообщения, которое вы пытаетесь удалить, этой функции реверса.

...