Возможность кодировать параметры 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) %}
как я могу решить эту проблему?
Спасибо