nab*_*don 6 python django unicode python-3.x
我在django 2.0中遇到问题,其中包含unicode slug的url不匹配,我搜索了一种解决方案,但没有找到适合我的情况的解决方案,这是我的代码的简化版本:
// models.py
class Level(models.Model):
name = models.CharField(max_length=100)
slug = models.SlugField(max_length=100, allow_unicode=True)
Run Code Online (Sandbox Code Playgroud)
在我的url文件中,我具有以下模式:
// urls.py
urlpatterns = [
path('', views.index, name='index'),
path('level/<slug:level_slug>', views.level, name='level')]
Run Code Online (Sandbox Code Playgroud)
现在,如果我走,对http://127.0.0.1:8000/game/level/deuxième我说这个错误:
Request Method: GET
Request URL: http://127.0.0.1:8000/game/level/deuxi%C3%A8me
Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:
game/ [name='index']
game/level/<slug:level_slug> [name='level']
admin/
accounts/
The current path, game/level/deuxième, didn't match any of these.
Run Code Online (Sandbox Code Playgroud)
但是,如果我将项目的slug更改为deuxieme不带unicode字符,则可以正常工作,有人知道该问题的解决方案吗?谢谢!
mar*_*nuy 10
在urls.py将路径从使用slug类型更改为str.
由此:
path('posts/<slug:slug>-<int:pk>/', views.PostDetailView.as_view()),
Run Code Online (Sandbox Code Playgroud)
对此:
path('posts/<str:slug>-<int:pk>/', views.PostDetailView.as_view()),
Run Code Online (Sandbox Code Playgroud)
正如评论中所建议的,slug路径转换器
匹配由 ASCII 字母或数字以及连字符和下划线字符组成的任何 slug 字符串。例如,building-your-1st-django-site。
但我们想保留那些非 ascii 字符,所以我们使用str:
str - 匹配任何非空字符串,不包括路径分隔符“/”。如果表达式中不包含转换器,则这是默认设置。
使用该unidecode库,并slug通过函数结果设置字段unidecode.unidecode,该库支持多种语言,并自动检测语言,然后将原始字符替换为英文字符。\n例如,如果要将中文中的“Hello”单词转换为英文字符,尝试下面的代码:
$ pip install unidecode\n$ python -c "import unidecode; print(\'---->\', unidecode.unidecode(\'\xe4\xbd\xa0\xe5\xa5\xbd\'))"\n----> Ni Hao\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |