私はDjangoフレームワークを使ってウェブサイトのオンラインストアを開発し始めます。私はベトナム語の "những-viên-kẹo"の名前を "nhung-vien-keo"に変更したいという問題に直面しています。私はこの記事を読んでいる: Django: Slug in VietnameseDjango:ベトナムのスラッグが正しく動作しません
をし、私はこのようなmodel.pyに何かをする:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
from django.template.defaultfilters import slugify
class Category(models.Model):
name = models.CharField(max_length=50)
slug = models.CharField(max_length=50, unique=True,help_text = 'Unique value for product page URL, created from name.')
description = models.TextField()
is_active = models.BooleanField(default=True)
meta_keywords = models.CharField("Meta Keywords", max_length=255, help_text='Comma-delimited set of SEO keywords for meta tag')
meta_description = models.CharField("Meta Description", max_length=255, help_text = 'Content for description meta tag')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
db_table = 'categories'
ordering = ['-created_at']
verbose_name_plural = 'Categories'
def __unicode__ (self):
return self.name
@models.permalink
def get_absolute_url(self):
return ('catalog_category',(), { 'category_slug': self.slug })
をしかし、私は管理ページの[名前]フィールドに「những・ビエン・ケオ」と入力すると、スラッグフィールドは「nhng-vien-ko」と表示されます。私は間違ったことを知らない。 そして、私は、テストを実行すると:
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
vietnamese_map = {
ord(u'ư'): 'u',
ord(u'ơ'): 'o',
ord(u'á'): 'a',
ord(u'n'): 'n',
ord(u'h'): 'h',
ord(u'ữ'): 'u',
ord(u'n'): 'n',
ord(u'g'): 'g',
ord(u'v'): 'v',
ord(u'i'): 'i',
ord(u'ê'): 'e',
ord(u'n'): 'n',
ord(u'k'): 'k',
ord(u'ẹ'): 'e',
ord(u'o'): 'o',
}
print unicode("những-viên-kẹo").translate(vietnamese_map)
それは正常に動作し、かつ "nhung・ビエン・ケオ" を返す
[EDIT]
私は私のform.py
でこれを試してみますclass CategoryAdminForm(forms.ModelForm):
class Meta:
model = Category
exclude =()
def clean_slug(self):
slug = self.cleaned_data['slug']
vietnamese_map = {
ord(u'ư'): 'u',
ord(u'ơ'): 'o',
ord(u'á'): 'a',
ord(u'n'): 'n',
ord(u'h'): 'h',
ord(u'ữ'): 'u',
ord(u'n'): 'n',
ord(u'g'): 'g',
ord(u'v'): 'v',
ord(u'i'): 'i',
ord(u'ê'): 'e',
ord(u'n'): 'n',
ord(u'k'): 'k',
ord(u'ẹ'): 'e',
ord(u'o'): 'o',
}
slug = slugify(unicode(slug).translate(vietnamese_map))
return slug
そしてadmin.pyで
class CategoryAdmin(admin.ModelAdmin):
form = CategoryAdminForm
# sets up values for how admin site lists categories
list_display = ('name', 'created_at', 'updated_at',)
list_display_links = ('name',)
list_per_page = 20
ordering = ['name']
search_fields = ['name', 'description', 'meta_keywords', 'meta_description']
exclude = ('created_at', 'updated_at',)
# sets up slug to be generated from category name
prepopulated_fields = {'slug': ('name',)}
admin.site.register(Category, CategoryAdmin)
しかし、まだ動作しません!