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))
تحلیل_بیت_کوین