即使使用 'allow_unicode=True',韩语中的 Slug 也无法在 Django 中工作
Slug in Korean not working in Django even with 'allow_unicode=True'
我正在尝试使用 django.utils.text
中的 slugify 制作一个自动 slug。以下是我的代码:
# models.py
from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(allow_unicode=True)
body = models.TextField()
date = models.DateTimeField(auto_now_add=True)
thumb = models.ImageField(default='default.png', blank=True)
author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
self.slug = slugify(self.title, allow_unicode=True)
super().save(*args, **kwargs)
def __str__(self):
return self.title
# article_create.html
{% extends 'base.html' %}
{% block content %}
<div class="create-article">
<h2>Awesome New Article </h2>
<form class='site-form' action="{% url 'articles:article_create' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="create">
</form>
</div>
{% endblock %}
# html template - article_lists.html
...
<a href="{% url 'articles:article_details' article.slug %}"></a>
...
我使用 allowed_unicode=True 以允许使用不同的语言,但是当我在表格的标题中输入韩语时出现以下错误:
第一个下划线是我正在尝试post的文章标题,第二个下划线是Django后端检查slug,但我看到它不识别韩文字母...我做了所有其他类似 Whosebug 的操作,包括放置 allow_unicode=True
,但它不起作用。这里一定有什么问题???
*编辑:这是 urls.py
代码:
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
path('', views.article_list, name="article_list"),
path('create/', views.article_create, name="article_create"),
path('<slug:slug>/', views.article_details, name='article_details'),
]
错误显示了您在 urls.py
文件中为给定路由定义的内容。您可以更改路由 articles/?P<slug>...
以包含更多内容而不仅仅是 [-a-zA-Z0-9_]
。那么反向查找应该可以匹配到slug。
找到原因了!它不工作是因为 urls.py
之前:
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
...
path('<slug:slug>/', views.article_details, name='article_details'),
]
之后:
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
...
path('<slug>/', views.article_details, name='article_details'),
]
我不得不将 <slug:slug>
更改为 <slug>
...我真的不知道为什么,也许它只是为了韩语,但这对我来说是正确的方法。
我正在尝试使用 django.utils.text
中的 slugify 制作一个自动 slug。以下是我的代码:
# models.py
from django.db import models
from django.contrib.auth.models import User
from django.utils.text import slugify
class Article(models.Model):
title = models.CharField(max_length=100)
slug = models.SlugField(allow_unicode=True)
body = models.TextField()
date = models.DateTimeField(auto_now_add=True)
thumb = models.ImageField(default='default.png', blank=True)
author = models.ForeignKey(User, default=None, on_delete=models.CASCADE)
def save(self, *args, **kwargs):
self.slug = slugify(self.title, allow_unicode=True)
super().save(*args, **kwargs)
def __str__(self):
return self.title
# article_create.html
{% extends 'base.html' %}
{% block content %}
<div class="create-article">
<h2>Awesome New Article </h2>
<form class='site-form' action="{% url 'articles:article_create' %}" method="POST" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="create">
</form>
</div>
{% endblock %}
# html template - article_lists.html
...
<a href="{% url 'articles:article_details' article.slug %}"></a>
...
我使用 allowed_unicode=True 以允许使用不同的语言,但是当我在表格的标题中输入韩语时出现以下错误:
第一个下划线是我正在尝试post的文章标题,第二个下划线是Django后端检查slug,但我看到它不识别韩文字母...我做了所有其他类似 Whosebug 的操作,包括放置 allow_unicode=True
,但它不起作用。这里一定有什么问题???
*编辑:这是 urls.py
代码:
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
path('', views.article_list, name="article_list"),
path('create/', views.article_create, name="article_create"),
path('<slug:slug>/', views.article_details, name='article_details'),
]
错误显示了您在 urls.py
文件中为给定路由定义的内容。您可以更改路由 articles/?P<slug>...
以包含更多内容而不仅仅是 [-a-zA-Z0-9_]
。那么反向查找应该可以匹配到slug。
找到原因了!它不工作是因为 urls.py
之前:
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
...
path('<slug:slug>/', views.article_details, name='article_details'),
]
之后:
from django.urls import path
from . import views
app_name = 'articles'
urlpatterns = [
...
path('<slug>/', views.article_details, name='article_details'),
]
我不得不将 <slug:slug>
更改为 <slug>
...我真的不知道为什么,也许它只是为了韩语,但这对我来说是正确的方法。