Django выдает ошибку 404, когда я пытаюсь использовать юникод-урлы

Существует проблема, когда django использует арабские слизни. Он может принимать их. Но когда вы обращаетесь к его url . Он не может найти подходящий запрос в базе данных для них. Он выдает мне 404 .

вот urls.py и мой url :

from django.urls import path , re_path
from django.contrib.sitemaps import GenericSitemap 
from .models import Course
from django.contrib.sitemaps.views import sitemap 
from .views import *

app_name = 'course'

info_dict = {
    'queryset': Course.objects.all(),
}

urlpatterns = [
    re_path(r'detail/(?P<slug>[\w_-]+)/$' , detail_course , name='detail_courses'),
    path('sitemap.xml', sitemap, {'sitemaps': {'blog': GenericSitemap(info_dict, priority=0.6)}}, name='django.contrib.sitemaps.views.sitemap'),
]

и его url, который я пытаюсь ввести :

http://127.0.0.1:8000/course/detail/%D8%AA%D8%AD%D9%84%DB%8C%D9%84_%D8%A8%DB%8C%D8%AA_%DA%A9%D9%88%DB%8C%D9%86/

root urls.py :

from django.contrib import admin
from django.urls import path , include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/' , include('accounts.urls')),
    path('course/' , include('courses.urls')),
    path('orders/' , include('order.urls')),
    path('' , include('home.urls')),
]

в чем его проблема?

Проблема не в арабских символах, а в подчеркивании. Вы можете включить его с помощью:

re_path(r'detail/(?P<slug>[\w_-]+)/$', detail_course, name='detail_courses')

С другой стороны, обычно слово slug не содержит подчеркивание, поэтому ваш алгоритм slugging, похоже, работает неправильно.

Для этого можно использовать функцию Django slugify(…) [Django-doc]:

print(slugify(u'تحلیل_بیت_کوین', allow_unicode=True))
تحلیل_بیت_کوین
Вернуться на верх