Django: reverse() не работает при передаче дополнительных опций в функцию просмотра
Я борюсь с раздражающей ошибкой в Django, я пытаюсь использовать reverse(), передавая метаданные как словарь Python (я следую документации, но это не работает, не могли бы вы помочь мне понять, что я упускаю? )
Это мой urlpattern (как вы видите, я передаю дополнительные параметры в функцию view, как описано в документации ):
from django.urls import path
from . import views
urlpatterns = [
...,
path("items/<int:item_id>", views.item_page, { 'message': None }, name="item page")
]
В моей функции views.item_page у меня есть следующее: as
...
reversed_url = reverse("item page", kwargs={'item_id': item_id, 'message': 'hello'} )
return HttpResponseRedirect(reversed_url)
Я получаю такую ошибку:
Django Version: 4.0.4
Exception Type: NoReverseMatch
Exception Value: Reverse for 'item page' with keyword arguments '{'item_id': 2, 'message': 'hello'}' not found. 1 pattern(s) tried: ['items/(?P<item_id>[0-9]+)\\Z']
Как будто он не принимает аргумент "сообщение" при реверсировании.
обратный будет принимать только те аргументы, которые существуют в urlpattern
в вашем шаблоне нет message
**если вы хотите отправлять сообщения **.
вы можете использовать модуль messages
в django
from django.contrib import messages
# in View
messages.success(request, 'Hello')
...
См. документацию по Отправке сообщений
Другой способ передать несколько структурированную дополнительную информацию следующему представлению - заполнить его request.GET
Querydict. Что-то вроде
qd = QueryDict( mutable=True)
qd['whatever'] = 'whatever' # populate it as you wish next view's request.GET to be
...
url = reverse('myapp:wherever', kwargs={ ...} ) # kwargs as defined in urls.py
return HttpResponseRedirect( url + '?' + qd.urlencode() )