如何在 Django 2.0 中使用波斯语蛞蝓解码 URL?

Posted

技术标签:

【中文标题】如何在 Django 2.0 中使用波斯语蛞蝓解码 URL?【英文标题】:How to decode URL with Persian slug in Django 2.0? 【发布时间】:2019-04-26 15:30:14 【问题描述】:

我有一个使用波斯蛞蝓的存档视图,例如:

چینیها-خورشید-مصنوعی-هم-ساختند

使用此网址模式:

urlpatterns = [
    ...

    path('archive/<str:slug>/', views.ArchiveDetailView.as_view(),

    ...
]

models.py:

class Archive(models.Model):
    ...

    slug = models.SlugField(_('Slug'), max_length=128, unique=True, allow_unicode=True)

    ...

views.py:

class ArchiveDetailView(DetailView):
    model = Archive

    def get_object(self, queryset=None):
        slug = self.kwargs.get(self.slug_url_kwarg)
        return get_object_or_404(self.model, slug=slug)

在本地使用 Django 内置 Web 服务器可以正常工作。但是当我在主机 (cPanel) 上部署站点时,返回 404 错误(仅适用于波斯蛞蝓)。

我想我找到了问题,但我不知道如何解决?

问题在于波斯语中的 slug、Web 服务器 (Apache) 或 Django 无法解码 URL。

【问题讨论】:

日志是怎么说的? 例行报告。 @PedroLobito 问题解决了吗? 【参考方案1】:

使用波斯蛞蝓最好的方法是使用正则表达式,它更适合解码,它可能会解决你的问题。


form django.urls import re_path
from . import views


urlpatterns = [
    re_path(r'(?P<slug>[-\w]+)/', views.detail),
]

或者,如果您想为 url 调度添加更多项目,您可以使用下面的示例。

re_path(r'detail/(?P<slug>[-\w]+)/', views.detail)

更多详情请点击以下链接: https://www.mongard.ir/one_part/73/django-persian-urls/

【讨论】:

以上是关于如何在 Django 2.0 中使用波斯语蛞蝓解码 URL?的主要内容,如果未能解决你的问题,请参考以下文章

如何在sql server中将这些奇怪的字符解码为可读的波斯语?

Django 中的“蛞蝓”是啥?

Django 中的“蛞蝓”是啥?

Django 中的“蛞蝓”是啥?

Django 中的“蛞蝓”是啥?

Django 中的“蛞蝓”是啥?