Шаблон Django url - параметр с косой чертой - PullRequest
1 голос
/ 24 октября 2011

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

da/ta1=/data2

По сути, у меня был следующий шаблон:

(r'^view/(?P<item_id>\w+=)/(?P<changekey>\w+)/$', 'view'),

Однако этот шаблон не соответствует из-за первой косой черты, которая является частью данных параметра.

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

Предполагая, что вы создаете URL-адрес самостоятельно, вы можете использовать quote_plus для кодирования встроенной косой черты:

>>> '/'.join([urllib.quote_plus(d) for d in ['da/ta1', 'data2']])
'da%2Fta1/data2'

И для декодирования:

>>> urllib.unquote_plus('da%2Fta1/data2')
'da/ta1/data2'

Чтобы затем сопоставить ваши данные, ваш шаблон может быть изменен на конструкцию, найденную ниже.Для первого параметра это соответствует всему, вплоть до символа =;второй параметр должен быть буквенно-цифровым.

(r'^view/(?P<item_id>[^=]+)=/(?P<changekey>\w+)/$', 'view')
1 голос
/ 23 августа 2017

У администратора Django такая же проблема с косыми чертами в параметрах. Чтобы исправить это, Django использует свою собственную функцию цитаты:

from django.contrib.admin.utils import quote
quote(param1)

В самом представлении:

unquote(self.kwargs.get('param1'))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...