Python perisan 404中的Django slug url

Python perisan 404中的Django slug url,python,django,django-urls,slug,Python,Django,Django Urls,Slug,我有一个django url: path('question/<slug:question_slug>/add_vote/', views.AddVoteQuestionView.as_view()) 根据,只能对slug模式使用ASCII字母或数字: slug-匹配由ASCII字母或数字以及连字符和下划线组成的任何slug字符串。例如,building-your-1st-django-site 而regex\w模式也匹配Unicode单词字符: 对于Unicode(str)模式

我有一个django url:

path('question/<slug:question_slug>/add_vote/', views.AddVoteQuestionView.as_view())
根据,只能对
slug
模式使用ASCII字母或数字:

slug
-匹配由ASCII字母或数字以及连字符和下划线组成的任何slug字符串。例如,
building-your-1st-django-site

而regex
\w
模式也匹配Unicode单词字符:

对于Unicode(str)模式: 匹配Unicode单词字符;这包括任何语言中可以作为单词一部分的大多数字符,以及数字和下划线。如果使用ASCII标志,则仅匹配
[a-zA-Z0-9.]

这是对答案的补充


要传递此类语言/unicode字符,您必须

  • 使用
  • 1.自定义路径转换器 如果我们查看Django的源代码,路径转换器使用这个正则表达式,
    [-a-zA-Z0-9++
    ,这在这里是无效的(参见Selcuk的答案)。

    因此,编写您自己的自定义slug转换器,如下所示

    from django.urls.converters import SlugConverter
    
    
    class CustomSlugConverter(SlugConverter):
        regex = '[-\w]+' # new regex pattern
    from django.urls.converters import SlugConverter
    
    
    class CustomSlugConverter(SlugConverter):
        regex = '[-\w]+' # new regex pattern
    from django.urls import path, register_converter
    
    register_converter(CustomSlugConverter, 'custom_slug')
    
    urlpatterns = [
        path('question/<custom_slug:question_slug>/add_vote/', views.AddVoteQuestionView.as_view()),
        ...
    ]
    from django.urls import re_path
    
    urlpatterns = [
        re_path(r'question/(?P<question_slug>[\w-]+)/add_vote/$', views.AddVoteQuestionView.as_view()),
        ...
    ]