【问题标题】:Persian text in url Djangourl Django 中的波斯文文本
【发布时间】:2023-03-14 02:36:01
【问题描述】:

我有一些包含波斯语文本的链接,例如:

http://sample.com/fields/طب%20نظامی

在视图函数中我想访问波斯语部分,所以:

url = request.path_info
key = re.findall('/fields/(.+)', url)[0]

但我收到以下错误:

IndexError at /fields/
list index out of range

实际上,问题在于索引为零,因为它在那里看不到任何东西!需要注意的是,它是 IIS Server 上的一个 Django 项目,我已经在其他服务器和本地服务器上成功测试过它。我认为它与IIS有关。此外,我曾尝试对 url 进行 slugify,但没有成功。我可以成功编码 url,但我认为这不是这个问题的实际答案。

基于 cmets: 我也检查了request.path 和同样的问题。它包含:

/fields/

我在本地服务器上实现了一个示例 django 项目,这是我的看法:

def test(request):
   t = request.path
   return HttpResponse(t)

结果:

http://127.0.0.1:8000/تست/
/تست/

没有任何问题。

【问题讨论】:

  • 您确定它在path_info 中吗?你能分享你在这里使用的path/url吗?
  • path_info 包含 /fields/。
  • 它不存在,这是我的问题。也许我的问题不合适,用“它看不到它”这句话。
  • 很可能您首先使用fields/ 访问该页面,因此出现错误,然后才会访问fields/some-persian-text
  • 这怎么可能?因为它只是我制作的一个链接,而不是大多数。另外,请注意,我可以使用本地服务器以相同的方式访问。

标签: django url iis unicode arabic


【解决方案1】:

您可以使用 python split() 方法来做到这一点

url = "http://sample.com/fields/طب%20نظامی"
url_key = url.split(sep="/", maxsplit=4)
url_key[-1]
output : 'طب%20نظامی'

在此我们通过 / 拆分 url 字符串,这在字符串中出现了 4 次,因此它将返回我们这样的字符串列表

['http:', '', 'sample.com', 'fields', 'طب%20نظامی']

在我们的例子中,我们必须将它存储在一个新变量中,我将它存储在 url_key 中,然后访问列表的最后一个索引,您将获得正确的输出。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多