Skip to content

Commit

Permalink
Fixed #317 -- SlugField now accepts hyphens. Thanks, Sune
Browse files Browse the repository at this point in the history
git-svn-id: http://code.djangoproject.com/svn/django/trunk@968 bcc190cf-cafb-0310-a4f2-bffc1f526a37
  • Loading branch information
adrianholovaty committed Oct 20, 2005
1 parent bf5dce6 commit 539e53c
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 9 deletions.
9 changes: 4 additions & 5 deletions django/contrib/admin/media/js/urlify.js
@@ -1,14 +1,13 @@
function URLify(s, num_chars) {
// changes, e.g., "Petty theft" to "petty_theft"

// remove all these words from the string before urlifying
removelist = ["a", "an", "as", "at", "before", "but", "by", "for", "from",
"is", "in", "into", "like", "of", "off", "on", "onto", "per",
"since", "than", "the", "this", "that", "to", "up", "via",
removelist = ["a", "an", "as", "at", "before", "but", "by", "for", "from",
"is", "in", "into", "like", "of", "off", "on", "onto", "per",
"since", "than", "the", "this", "that", "to", "up", "via",
"with"];
r = new RegExp('\\b(' + removelist.join('|') + ')\\b', 'gi');
s = s.replace(r, '');
s = s.replace(/[^\w\s]/g, ''); // remove unneeded chars
s = s.replace(/[^\w\s-]/g, ''); // remove unneeded chars
s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces
s = s.replace(/\s+/g, '_'); // convert spaces to underscores
s = s.toLowerCase(); // convert to lowercase
Expand Down
2 changes: 1 addition & 1 deletion django/core/meta/fields.py
Expand Up @@ -500,7 +500,7 @@ def get_manipulator_field_objs(self):
class SlugField(Field):
def __init__(self, *args, **kwargs):
kwargs['maxlength'] = 50
kwargs.setdefault('validator_list', []).append(validators.isAlphaNumeric)
kwargs.setdefault('validator_list', []).append(validators.isSlug)
# Set db_index=True unless it's been set manually.
if not kwargs.has_key('db_index'):
kwargs['db_index'] = True
Expand Down
7 changes: 6 additions & 1 deletion django/core/validators.py
Expand Up @@ -21,6 +21,7 @@
integer_re = re.compile(r'^-?\d+$')
ip4_re = re.compile(r'^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')
phone_re = re.compile(r'^[A-PR-Y0-9]{3}-[A-PR-Y0-9]{3}-[A-PR-Y0-9]{4}$', re.IGNORECASE)
slug_re = re.compile(r'^[-\w]+$')
url_re = re.compile(r'^http://\S+$')

from django.conf.settings import JING_PATH
Expand Down Expand Up @@ -57,7 +58,11 @@ def isAlphaNumeric(field_data, all_data):

def isAlphaNumericURL(field_data, all_data):
if not alnumurl_re.search(field_data):
raise ValidationError, "This value must contain only letters, numbers, underscores and slashes."
raise ValidationError, "This value must contain only letters, numbers, underscores or slashes."

def isSlug(field_data, all_data):
if not slug_re.search(field_data):
raise ValidationError, "This value must contain only letters, numbers, underscores or hyphens."

def isLowerCase(field_data, all_data):
if field_data.lower() != field_data:
Expand Down
4 changes: 2 additions & 2 deletions docs/model-api.txt
Expand Up @@ -369,8 +369,8 @@ Here are all available field types:

``SlugField``
"Slug" is a newspaper term. A slug is a short label for something,
containing only letters, numbers and underscores. They're generally used in
URLs.
containing only letters, numbers, underscores or hyphens. They're generally
used in URLs.

Implies ``maxlength=50`` and ``db_index=True``.

Expand Down

0 comments on commit 539e53c

Please sign in to comment.