django NoReverseMatch at / TypeError - отсутствуют обязательные позиционные аргументы - PullRequest
0 голосов
/ 06 апреля 2020
path('administration/delete-post/', administration_views.delete_upload, name='delete_upload'),
path('administration/delete-post/<slug:post_slug>', administration_views.delete_upload, name='delete_upload'),

По какой-то причине, когда я добавил класс удаления, мне пришлось добавить два шаблона URL. Когда я закомментирую первый путь, он дает мне ошибку

Reverse for 'NoReverseMatch at /administration/

delete_upload' with no arguments not found. 1 pattern(s) tried: ['administration/delete\\-post/(?P<post_slug>[-a-zA-Z0-9_]+)$']

Я даже указал слагов на html.

{% for post in posts %}
    <a href="{% url 'delete_upload' %}{{ post.slug }}">Delete Upload</a>
{% endif %}

С двумя одинаковыми шаблонами URL, он как-то работал нормально, но теперь я хочу добавить страницу подтверждения, и она снова вызывает ошибку.

views.py

def delete_upload(request, post_slug):
   post = get_object_or_404(VideoPost, slug=post_slug)
   if request.method == "POST":
       post.delete()
   context = {
       "post": post
   }
   return render(request, "administration/confirm_delete.html", context)

verify_delete. html

{% block content %}
<form action="." method="POST">{% csrf_token %}
    <h1>Are you sure you want to delete</h1>
    <p>{{post.title}}</p>
    <a href="../">Cancel</a><input type="submit" value="Confirm">
</form>

{% endblock %}

error

TypeError at /administration/delete-post/
delete_upload() missing 1 required positional argument: 'post_slug'

Он направляет меня на страницу verify_delete правильно с слагами на URL, но когда я нажимаю подтвердить, слаг исчезнет на URL, и это вызывает ошибку, кажется.

Я вижу проблему, но я не могу ее исправить ... пожалуйста, помогите. Спасибо за любую помощь

Ответы [ 2 ]

1 голос
/ 06 апреля 2020

Удалить path('administration/delete-post/', в вашем urls.py файле

В вашем HTML template передать post.slug вместе с пространством имен url

{% for post in posts %}
    <a href="{% url 'delete_upload' post.slug %}">Delete Upload</a>
{% endif %}
0 голосов
/ 06 апреля 2020

Вы используете url тег шаблона неправильно. В html необходимо заменить

<a href="{% url 'delete_upload' %}{{ post.slug }}">Delete Upload</a>

на

<a href="{% url 'delete_upload' slug=post.slug %}">Delete Upload</a>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...