姜戈。非 ascii 字段不会创建 slug。我希望得到音译,但得到一个空字段和错误
Posted
技术标签:
【中文标题】姜戈。非 ascii 字段不会创建 slug。我希望得到音译,但得到一个空字段和错误【英文标题】:Django. Non-ascii field doesn't create slug. I expect to get transliteration, but getting an empty field and error 【发布时间】:2021-05-03 21:45:34 【问题描述】:我有简单的模型,带有标题和 slug 字段。我想接受非拉丁字符作为标题并将它们音译成拉丁 slug。具体来说,我想音译西里尔字符,比如“Привет, мир!”转化为拉丁语 'privet-mir' 蛞蝓。而不是蛞蝓我得到以下错误:
/blog/ 上的 NoReverseMatch
未找到带有参数“('',)' 的“blog_detail”的反向操作。 1 尝试的模式:['blog/(?P[-a-zA-Z0-9_]+)/$']
Django Version: 3.1.5
Python Version: 3.9.1
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'blog_detail' with arguments '('',)' not found. 1 pattern(s) tried: ['blog/(?P<slug>[-a-zA-Z0-9_]+)/$']
型号
from django.db import models
from django.template.defaultfilters import slugify
class Post(models.Model):
title = models.CharField(max_length=70)
slug = models.SlugField(null=False, unique=True, allow_unicode=True)
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
return super().save(*args, **kwargs)
def __str__(self):
return self.title
admin.py
from django.contrib import admin
from .models import Post
class PostAdmin(admin.ModelAdmin):
prepopulated_fields = 'slug': ('title',)
admin.site.register(Post, PostAdmin)
urls.py
from django.urls import path
from . import views
app_name = 'blog'
urlpatterns = [
path('', views.BlogList.as_view(
template_name=app_name + "/blog_list.html"), name='blog_list'),
path('<slug:slug>/', views.BlogDetail.as_view(
template_name=app_name + "/blog_detail.html"), name='blog_detail'),
]
views.py
from .models import Post
from django.views.generic import ListView, DetailView
class BlogList(ListView):
model = Post
class BlogDetail(DetailView):
model = Post
blog_list.html(针对每篇文章)
<a href="% url 'blog:blog_detail' post.slug %"> post.title </a>
blog_detail.html(短)
<h1> post.title </h1>
【问题讨论】:
传递给 URL 解析器的 slug 值为空,这就是您在错误中看到arguments '('',)'
的原因。这表明已将空字符串作为参数传递。您需要进一步调试它以确定为什么您的保存方法中没有设置任何值。
感谢您的回复。我明白为什么我会出错。问题是如何解决它。 .我在管理面板中看到 slug 字段中没有 slug。因为我有 'null=False' Django 给了我错误。是否可以在 Django 中看到某种日志?我所拥有的都在上面发布,这对于找出问题的正确原因并不是很有帮助
【参考方案1】:
我找到了解决办法!
感谢 KenWhitesell https://forum.djangoproject.com/t/django-slugify-error/6153/4 和 Evgeny https://***.com/a/4036665/15109119
也可以使用 javascript,例如,用于在 Django 管理面板中自动填充 slug 字段。它需要使用 'allow_unicode=True' 而实际上 'slugifying' 字段。
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title, allow_unicode=True)
return super().save(*args, **kwargs)
【讨论】:
以上是关于姜戈。非 ascii 字段不会创建 slug。我希望得到音译,但得到一个空字段和错误的主要内容,如果未能解决你的问题,请参考以下文章