Я пытаюсь создать ярлыки Unicode с помощью Django. Проблема возникает, когда он пытается сохранить и разрешить URL-адреса с указанными слагами с символами Unicode в них. Когда я проверил, кажется, что Django изменяет символы при использовании SlugField
.
Это мой models.py:
class Post(models.Model):
title = models.CharField()
slug = models.SlugField(unique=True, blank=True, allow_unicode=True)
urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
# Cat
path('', views.CatList.as_view(), name='cat-list'),
path('create/', views.CatCreate.as_view(), name='cat-create'),
path('<slug:cat_slug>/', views.CatDetail.as_view(), name='cat-detail'),
path('<slug:cat_slug>/edit/', views.CatEdit.as_view(), name='cat-edit'),
# Post
path('<slug:cat_slug>/posts/', views.CatDetail.as_view(), name='post-list'),
path('<slug:cat_slug>/posts/create/', views.PostCreate.as_view(), name='post-create'),
path('<slug:cat_slug>/posts/<slug:post_slug>/', views.PostDetail.as_view(), name='post-detail'),
path('<slug:cat_slug>/posts/<slug:post_slug>/edit/', views.PostEdit.as_view(), name='post-edit')
]
И я использую slugify(slug, allow_unicode=True)
для автоматического создания slug
из title
.
Итак, чтобы проверить это, я использовал தமிழ்
как title
. Вместо успешного перенаправления на URL-адрес /cats/test-cat/posts/தமிழ்/
Django показано исключение NoReverseMatch
со следующим сообщением.
Reverse for 'post-detail' with arguments '('test-cat', 'zw93tz-தமழ')' not found. 1 pattern(s) tried: ['cats/(?P<cat_slug>[-a-zA-Z0-9_]+)/posts/(?P<post_slug>[-a-zA-Z0-9_]+)/$']
Когда я проверяю базу данных, поле title
имеет правильные символы தமிழ்
но поле slug
содержит измененные символы தமழ
.
Когда я искал решения, я нашел обходной путь для использования <str>
вместо <slug>
в urls.py
.
Почему это происходит с <slug>
и как это исправить?