Ticket #2135: urlify.4.diff
File urlify.4.diff, 6.2 KB (added by , 18 years ago) |
---|
-
django/db/models/base.py
2 2 import django.db.models.manager 3 3 from django.core import validators 4 4 from django.core.exceptions import ObjectDoesNotExist 5 from django.db.models.fields import AutoField, ImageField, FieldDoesNotExist 5 from django.db.models.fields import AutoField, ImageField, FieldDoesNotExist, URLify 6 6 from django.db.models.fields.related import OneToOneRel, ManyToOneRel 7 7 from django.db.models.related import RelatedObject 8 8 from django.db.models.query import orderlist2sql, delete_objects … … 144 144 dispatcher.send(signal=signals.class_prepared, sender=cls) 145 145 146 146 _prepare = classmethod(_prepare) 147 148 def prepopulate(self): 149 for f in self._meta.fields: 150 if not f.prepopulate_from: continue 151 if getattr(self, f.attname): continue 152 value = [getattr(self, p) for p in f.prepopulate_from] 153 value = URLify(' '.join(value), f.maxlength) 154 setattr(self, f.attname, value) 147 155 148 156 def save(self): 149 157 dispatcher.send(signal=signals.pre_save, sender=self.__class__, instance=self) -
django/db/models/fields/__init__.py
7 7 from django.utils.functional import curry, lazy 8 8 from django.utils.text import capfirst 9 9 from django.utils.translation import gettext, gettext_lazy, ngettext 10 import datetime, os, time 10 import datetime, os, time, re 11 11 12 12 class NOT_PROVIDED: 13 13 pass … … 702 702 703 703 def get_manipulator_field_objs(self): 704 704 return [forms.TextField] 705 706 def URLify(s, num_chars): 707 ''' 708 Changes, e.g., "Petty theft" to "petty_theft". 709 This function is the Python equivalent of the javascript function 710 of the same name in django/contrib/admin/media/js/urlify.js. 711 It can get invoked for any field that has a prepopulate_from 712 attribute defined, although it only really makes sense for 713 SlugFields. 714 715 NOTE: this implementation corresponds to the Python implementation 716 of the same algorithm in django/contrib/admin/media/js/urlify.js 717 ''' 718 # remove all these words from the string before urlifying 719 removelist = ["a", "an", "as", "at", "before", "but", "by", "for", 720 "from", "is", "in", "into", "like", "of", "off", "on", 721 "onto", "per", "since", "than", "the", "this", "that", 722 "to", "up", "via", "with"] 723 ignore_words = '|'.join([r for r in removelist]) 724 ignore_words_pat = re.compile(r'\b(%s)\b' % ignore_words, re.I) 725 ignore_chars_pat = re.compile(r'[^-a-z0-9\s]') 726 inside_space_pat = re.compile(r'[-\s]+') 727 728 s = s.lower() # convert to lowercase 729 s = ignore_words_pat.sub('', s) # remove unimportant words 730 s = ignore_chars_pat.sub('', s) # remove unneeded chars 731 s = s.strip() # trim leading/trailing spaces 732 s = inside_space_pat.sub('-', s) # convert remaining spaces to hyphens 733 if num_chars is not None: 734 s = s[:num_chars] # trim to first num_chars chars 735 return s 705 736 706 737 class SmallIntegerField(IntegerField): 707 738 def get_manipulator_field_objs(self): -
django/contrib/admin/media/js/urlify.js
1 1 function URLify(s, num_chars) { 2 2 // changes, e.g., "Petty theft" to "petty_theft" 3 3 // remove all these words from the string before urlifying 4 // NOTE: this implementation corresponds to the Python implementation 5 // of the same algorithm in django/db/models/fields/__init__.py 4 6 removelist = ["a", "an", "as", "at", "before", "but", "by", "for", "from", 5 7 "is", "in", "into", "like", "of", "off", "on", "onto", "per", 6 8 "since", "than", "the", "this", "that", "to", "up", "via", -
django/template/defaultfilters.py
3 3 from django.template import resolve_variable, Library 4 4 from django.conf import settings 5 5 from django.utils.translation import gettext 6 from django.db.models.fields import URLify 6 7 import re 7 8 import random as random_module 8 9 … … 63 64 """ 64 65 return list(str(value)) 65 66 66 def slugify(value): 67 "Converts to lowercase, removes non-alpha chars and converts spaces to hyphens" 68 value = re.sub('[^\w\s-]', '', value).strip().lower() 69 return re.sub('[-\s]+', '-', value) 67 def slugify(value, maxlen=None): 68 """ 69 Converts to lowercase, removes non-alpha chars and converts spaces 70 to hyphens 71 """ 72 return URLify(value, maxlen) 70 73 71 74 def stringformat(value, arg): 72 75 """ -
tests/othertests/defaultfilters.py
40 40 ['1', '2', '3', '4'] 41 41 42 42 >>> slugify(' Jack & Jill like numbers 1,2,3 and 4 and silly characters ?%.$!/') 43 'jack-jill- like-numbers-123-and-4-and-silly-characters'43 'jack-jill-numbers-123-and-4-and-silly-characters' 44 44 45 >>> slugify('the test of testers ') 46 'test-testers' 47 45 48 >>> stringformat(1, '03d') 46 49 '001' 47 50 -
docs/templates.txt
993 993 slugify 994 994 ~~~~~~~ 995 995 996 Converts to lowercase, removes non-word characters (alphanumerics and997 underscores) and converts spaces to hyphens. Also strips leading and trailing 998 whitespace.996 Converts to lowercase, removes unimportant words, removes non-word 997 characters (everything but letters and digits), and converts spaces to 998 hyphens. Also strips leading and trailing whitespace. 999 999 1000 1000 stringformat 1001 1001 ~~~~~~~~~~~~