2015-03-06 2 views
-3

Использование Джанго 1.7 и Python 2.7, в взглядов у меня есть:Как передать нелатинскую строку в параметр url в django?

page = 0 
sex = [u'\u0632\u0646'] #sex = زن 
url = "/result/%s/%d" % (sex, page) 
return HttpResponseRedirect(url) 

Что нужно вернуть:

/result/زن/0 

Однако полученный URL оказывается:

/result/[u'\u0632\u0646']/0 

Это не то, что предусмотрено в схеме:

`url(r'^result/(?P<sex>\w+)/(?P<page>\d+)','userprofile.views.profile_search_result')`, 

Я также попытался

return HttpResponseRedirect(iri_to_uri(url)) 

, но не решает проблему.

Я действительно смутился и ценю вашу помощь, чтобы исправить это.

+0

Но кажется, что 'sex' является второй частью вашего шаблона' r '^ result/(? P \ w +)/(? P \ d +)' '? И о вашем 'url' вам нужно указать для python, что формат является unicode, вам нужно добавить' u' в начало вашего url 'url = u '/ result /% s /% d"% (sex, страница) ' – Kasramvd

+0

или в обратной последовательности использовать функцию' unicode' return HttpResponseRedirect (unicode (url, 'escape-unicode')) ' – Kasramvd

+0

@Kasra, предполагаемый первый параметр после'/result' является 'زن', что очевидно в URL-адресе шаблон. Однако браузер (и текстовый редактор здесь) перемещает '0' слева от' زن' (не уверен, почему). – supermario

ответ

1

Поскольку секс является списком, вам просто нужно использовать фактический элемент, который вы хотите:

url = "/result/%s/%d" % (sex[0], page) 

Хотя заметим, что для создания URL-адресов в Django, вы должны действительно использовать функцию reverse:

from django.core.urlresolvers import reverse 
... 
url = reverse('userprofile.views.profile_search_result', kwargs={'sex': sex[0], 'page': page}) 
+0

Спасибо за помощь Даниэль. – supermario

1

url должен также быть в юникод строку для того, чтобы работать:

page = 0 
sex = u'\u0632\u0646' #sex=زن 
url = u"/result/%s/%d" % (sex, page) 
return HttpResponseRedirect(url) 
+0

Также вам нужно упомянуть, что то, что OP хочет вернуть, не имеет никакого отношения к шаблону регулярного выражения! – Kasramvd

+0

Это приводит к другому странному URL-адресу, то есть 'http://127.0.0.1:8000/result/ [u '% 5Cu0632% 5Cu0646']/0' – supermario

+0

Нет, это не так. –

Смежные вопросы