【问题标题】:How to pass non-latin string to url parameter in django?如何将非拉丁字符串传递给 django 中的 url 参数?
【发布时间】:2015-05-07 21:29:06
【问题描述】:

使用 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')`,

我也试过了

return HttpResponseRedirect( iri_to_uri(url))

但没有解决问题。

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

【问题讨论】:

  • 但似乎sex 是您模式r'^result/(?P&lt;sex&gt;\w+)/(?P&lt;page&gt;\d+)' 的第二部分?关于您的url,您需要为python指定格式为unicode,您需要在您的网址url = u"/result/%s/%d" % (sex, page)的开头添加u
  • 或作为回报使用unicode函数return HttpResponseRedirect(unicode(url,'escape-unicode'))
  • @Kasra,/result 之后的预期第一个参数是 زن,这在 url 模式中很明显。但是浏览器(和此处的文本编辑器)将0 移动到زن 的左侧(不知道为什么)。
  • @Kasra return HttpResponseRedirect(unicode(url,'escape-unicode')) 原因:decoding Unicode is not supported
  • 是的,它可以做到,尽管我的领事显示它是正确的&gt;&gt;&gt; print url /result/زن/0 。 :) 抱歉解码是'unicode-escape'!但我认为这也可能与您的浏览器有关!有关更多详细信息,请查看此链接docs.djangoproject.com/en/1.7/ref/unicode/#uri-and-iri-handling

标签: django unicode python-unicode


【解决方案1】:

由于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})

【讨论】:

  • 感谢丹尼尔的帮助。
【解决方案2】:

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

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

【讨论】:

  • 另外你需要提一下,OP 想要返回的内容并不符合他在正则表达式模式上的条件!
  • 这会导致另一个奇怪的网址,即http://127.0.0.1:8000/result/[u'%5Cu0632%5Cu0646']/0
猜你喜欢
  • 2023-03-22
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2015-11-12
  • 2011-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多