diff --git a/django/utils/html.py b/django/utils/html.py index 607362817b472..e1860627ceb06 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -53,16 +53,18 @@ def fix_ampersands(value): def urlize(text, trim_url_limit=None, nofollow=False): """ - Converts any URLs in text into clickable links. Works on http://, https:// and - www. links. Links can have trailing punctuation (periods, commas, close-parens) - and leading punctuation (opening parens) and it'll still do the right thing. + Converts any URLs in text into clickable links. Works on http://, https:// + and www. links. Links can have trailing punctuation (periods, commas, + close-parens) and leading punctuation (opening parens) and it'll still do + the right thing. - If trim_url_limit is not None, the URLs in link text will be limited to - trim_url_limit characters. + If trim_url_limit is not None, the URLs in link text longer than this limit + will truncated to trim_url_limit-3 characters and appended with an elipsis. - If nofollow is True, the URLs in link text will get a rel="nofollow" attribute. + If nofollow is True, the URLs in link text will get a rel="nofollow" + attribute. """ - trim_url = lambda x, limit=trim_url_limit: limit is not None and (x[:limit] + (len(x) >=limit and '...' or '')) or x + trim_url = lambda x, limit=trim_url_limit: limit is not None and (len(x) > limit and ('%s...' % x[:max(0, limit - 3)])) or x words = word_split_re.split(text) nofollow_attr = nofollow and ' rel="nofollow"' or '' for i, word in enumerate(words): diff --git a/docs/templates.txt b/docs/templates.txt index cb8e238f434e5..c32b1af1dddf7 100644 --- a/docs/templates.txt +++ b/docs/templates.txt @@ -1266,7 +1266,8 @@ Converts URLs in plain text into clickable links. urlizetrunc ~~~~~~~~~~~ -Converts URLs into clickable links, truncating URLs to the given character limit. +Converts URLs into clickable links, truncating URLs longer than the given +character limit. **Argument:** Length to truncate URLs to diff --git a/tests/regressiontests/defaultfilters/tests.py b/tests/regressiontests/defaultfilters/tests.py index 4a2e9432b0569..b35636aba6183 100644 --- a/tests/regressiontests/defaultfilters/tests.py +++ b/tests/regressiontests/defaultfilters/tests.py @@ -121,7 +121,18 @@ 'http://short.com/' >>> urlizetrunc('http://www.google.co.uk/search?hl=en&q=some+long+url&btnG=Search&meta=', 20) -'http://www.google.co...' +'http://www.google...' + +# Check truncating of URIs which are the exact length +>>> uri = 'http://31characteruri.com/test/' +>>> len(uri) +31 +>>> urlizetrunc(uri, 31) +'http://31characteruri.com/test/' +>>> urlizetrunc(uri, 30) +'http://31characteruri.com/t...' +>>> urlizetrunc(uri, 2) +'...' >>> wordcount('') 0