当我尝试使用unicode url时,django给了我404错误



django使用阿拉伯语鼻涕虫时有一个问题。它可以接受它们。但是当你去找它的url。在数据库中找不到匹配的查询。它给我404。

这是url .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')

话虽这么说,一般情况下,段鼻涕虫不包含下划线,所以你的段鼻涕虫算法似乎不能正常工作。

你可以使用Django的slugify(…)function[Django-doc]for this:
print(slugify(u'تحلیل_بیت_کوین', allow_unicode=True))
تحلیل_بیت_کوین

相关内容

最新更新