如何在django中将非拉丁字符串传递给url参数?

如何在django中将非拉丁字符串传递给url参数?,django,unicode,python-unicode,Django,Unicode,Python Unicode,使用django 1.7和python 2.7,在视图中我有: 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&g

使用django 1.7和python 2.7,在视图中我有:

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')`,
但这并不能解决问题


我真的很困惑,非常感谢您的帮助来解决这个问题。

url
也应该是一个unicode字符串才能工作:

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

因为sex是一个列表,所以您只需使用您想要的实际元素:

url = "/result/%s/%d"  % (sex[0], page)
尽管需要注意,要在Django中构建URL,您应该真正使用
reverse
函数:

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

但是似乎性是你模式的第二部分?关于你的
url
,你需要为python指定unicode格式,你需要在你的url
url=u/result/%s/%d”%(性别,页码)
的前面添加一个
u
,或者反过来使用
unicode
函数
返回HttpResponseDirect(unicode(url,'escape-unicode'))
@Kasra,
/result
之后的预期第一个参数是
زن
,这在url模式中很明显。然而,浏览器(和这里的文本编辑器)将
0
移到
的左侧(不确定原因)。@Kasra
返回HttpResponseRedirect(unicode(url,'escape-unicode'))
原因:
不支持解码unicode
是的,可以这样做,尽管我的领事在右侧显示
>>打印url/result/抱歉,解码是
'unicode-escape'
!但我认为这也可能与你的浏览器有关!要了解更多详细信息,请查看此链接,您还需要提到OP想要返回的内容不符合regex模式的条件!这会导致另一个奇怪的url,即
http://127.0.0.1:8000/result/[u'%5Cu0632%5Cu0646']/0
感谢您的帮助。
from django.core.urlresolvers import reverse
...
url = reverse('userprofile.views.profile_search_result', kwargs={'sex': sex[0], 'page': page})