Возможность кодировать параметры url в шаблоне django при использовании тега url для предотвращения ошибки NoReverseMatch

Я пишу проект с python 3.10 и django 4.1

Я определил следующий маршрут:

app_name = 'admin_extend'

urlpatterns = [
    path('add_fav/<str:name>/<str:add_url>/<str:admin_url>/', views.add_fav, name='add_fav'),
]

теперь у меня есть 3 параметра, name, add_url и admin_url.

оба add_url и admin_url содержат '/', поэтому мне нужно иметь возможность экранировать их в шаблоне django.

вот мой код в шаблоне:

<a href="{% url 'admin_extend:add_fav' name=model.name add_url=model.add_url admin_url=model.admin_url %}" class="changelink">{% translate 'Fav' %}</a>

допустим, значение параметров name='foo', add_url='/a/b/c/', admin_url='/c/d/e/', маршрут не работает с ошибкой NoReverseMatch:

Reverse for 'add_fav' with keyword arguments '{'name': 'foo', 'add_url': '/a/b/c/', 'admin_url': '/c/d/e/'}' not found. 1 pattern(s) tried: ['admin_extend/add_fav/(?P<name>[^/]+)/(?P<add_url>[^/]+)/(?P<admin_url>[^/]+)/\\Z']

я протестировал его и если я предоставляю параметры без символов /, то я не получаю ошибки.

Моя проблема в том, что я действительно не могу нигде найти, как избавиться от этих параметров, я много гуглил и проверял на stackoverflow

Например, я не могу использовать {% filter urlencode %} до и после, потому что url сначала должен быть проверен, а затем он пройдет через urlencode,

я узнал, что я не могу запускать код python в этих шаблонах, поэтому я не могу использовать urlqoute из django.utils.http

а использование фильтра urlencode таким образом не является правильным синтаксисом:

{% url 'admin_extend:add_fav' name=(model.name|urlencode) add_url=(model.add_url|urlencode) admin_url=(model.admin_url|urlencode) %}

как я могу решить эту проблему?

Спасибо

Вернуться на верх