如何在django中将非拉丁字符串传递给url参数?
使用django 1.7和python 2.7,在视图中我有:如何在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
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格式,你需要在你的urlurl=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})