python – 烧瓶上的slu field字段
发布时间:2020-12-20 12:31:13 所属栏目:Python 来源:网络整理
导读:我想创建一个存储在数据库中的slug字段. 我搜索了一下,我找到了http://flask.pocoo.org/snippets/5/,但是我在应用程序中集成代码时遇到了问题. 这是我的modele.py: from unicodedata import normalizedef slugfy(text,encoding=None,permitted_chars='abcde
我想创建一个存储在数据库中的slug字段.
我搜索了一下,我找到了http://flask.pocoo.org/snippets/5/,但是我在应用程序中集成代码时遇到了问题. 这是我的modele.py: from unicodedata import normalize def slugfy(text,encoding=None,permitted_chars='abcdefghijklmnopqrstuvwxyz0123456789-'): if isinstance(text,str): text = text.decode(encoding or 'ascii') clean_text = text.strip().replace(' ','-').lower() while '--' in clean_text: clean_text = clean_text.replace('--','-') ascii_text = normalize('NFKD',clean_text).encode('ascii','ignore') strict_text = map(lambda x: x if x in permitted_chars else '',ascii_text) return ''.join(strict_text) class Chanteur(db.Model): id = db.Column(db.Integer,primary_key = True) nom = db.Column(db.String(200),index = True,unique = True) slug = db.Column(db.String(255)) chanteurs = db.relationship('Chanson',backref = 'chanteur',lazy = 'dynamic') def __repr__(self): return '<Chanteur %r>' % (self.nom) def __setattr__(self,key,value): super(Chanteur,self).__setattr__(key,value) if key == 'nom': self.slug = slugfy(self.nom) class Chanson(db.Model): id = db.Column(db.Integer,primary_key = True) titre = db.Column(db.String(255)) chanteur_id = db.Column(db.Integer,db.ForeignKey('chanteur.id')) def __repr__(self): return '<Chanson %r>' % (self.titre) 它不起作用:当我添加一个新的objet(chanteur)时,slug字段是空的 解决方法
为了坚持数据库中的slug,我使用以下方法(使用非常有用的
python-slugify 库):
from slugify import slugify # among other things class Song(db.Model): id = db.Column(db.Integer,primary_key = True) title = db.Column(db.String(255)) slug = db.Column(db.String(255)) def __init__(self,*args,**kwargs): if not 'slug' in kwargs: kwargs['slug'] = slugify(kwargs.get('title','')) super().__init__(*args,**kwargs) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |