【发布时间】:2011-11-27 16:22:14
【问题描述】:
我是 Django 新手。我来自 PHP,来自 CodeIgniter,在 CodeIgniter 中我们有你的 Helpers 概念(我们在整个项目中使用的函数)。我是 Python 新手,我不知道最好的方法,我最终得到了这个 models.py:
from django.db import models
import unicodedata
class JobsadsText(models.Model):
hash = models.TextField(primary_key=True)
site_name = models.TextField()
uri = models.TextField()
job_title = models.TextField()
job_description = models.TextField()
country_ad = models.TextField()
zone_ad = models.TextField()
location_ad = models.TextField()
date_inserted = models.DateTimeField()
class Meta:
db_table = u'jobsads_text'
managed = False
def get_absolute_url(self):
return "/frame/" + format_string_to_uri(self.zone_ad) + "/" + format_string_to_uri(self.location_ad) + "/" + format_string_to_uri(self.job_title) + ".html"
def ascii_job_title(self):
return strip_accents(self.job_title)
def ascii_job_description(self):
return strip_accents(self.job_description)
def ascii_country_ad(self):
return strip_accents(self.country_ad)
def ascii_zone_ad(self):
return strip_accents(self.zone_ad)
def ascii_location_ad(self):
return strip_accents(self.location_ad)
# Para poder pesquisar palavras sem acentos - END -
def __unicode__(self):
return self.job_title
# H E L P E R S
# Para remover acentos de palavras acentuadas
def strip_accents( text, encoding='ASCII'):
return ''.join((c for c in unicodedata.normalize('NFD', unicode(text)) if unicodedata.category(c) != 'Mn') )
'''
Esta funcao formata uma string para poder ser usada num URI
'''
def format_string_to_uri(string):
# Para substituir os caracteres q nao sao permitidos no URL
replacements = {"(" : "(", ")" : ")", "!" : "-", "$" : "-", "?" : "-", ":" : "-", " " : "-", "," : "-", "&" : "-", "+" : "-", "-" : "-", "/" : "-", "." : "-", "*" : "-",}
return _strtr(_strip_accents(string).lower(), replacements)
# Para substituir occorrencias num dicionario
def _strtr(text, dic):
""" Replace in 'text' all occurences of any key in the given
dictionary by its corresponding value. Returns the new tring."""
# http://code.activestate.com/recipes/81330/
# Create a regular expression from the dictionary keys
import re
regex = re.compile("(%s)" % "|".join(map(re.escape, dic.keys())))
# For each match, look-up corresponding value in dictionary
return regex.sub(lambda mo: str(dic[mo.string[mo.start():mo.end()]]), text)
# Para remover acentos de palavras acentuadas
def _strip_accents( text, encoding='ASCII'):
return ''.join((c for c in unicodedata.normalize('NFD', unicode(text)) if unicodedata.category(c) != 'Mn') )
我在整个项目中都使用这个函数(strip_accents、format_string_to_uri、_strtr、_strip_accents)。如何组织这些函数,而不必在需要使用它们的每个 *.py 文件中编写这些函数?
最好的问候,
【问题讨论】: