summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdrian Holovaty <adrian@holovaty.com>2006-01-15 01:51:30 +0000
committerAdrian Holovaty <adrian@holovaty.com>2006-01-15 01:51:30 +0000
commit0eaee6f5d4976f3b0146d512c43d2f9a19f39021 (patch)
tree1b7dee9df4301fc1bc248115873ad6ac0a23b15c
parente260037e168152b17e4f46685ccce301fe3f5c99 (diff)
Fixed #1067 and #276 -- Added a {% spaceless %} tag, available in all templates
git-svn-id: http://code.djangoproject.com/svn/django/trunk@1967 bcc190cf-cafb-0310-a4f2-bffc1f526a37
-rw-r--r--django/core/template/defaulttags.py14
-rw-r--r--django/utils/html.py4
-rw-r--r--docs/templates.txt28
-rw-r--r--tests/othertests/templates.py5
4 files changed, 51 insertions, 0 deletions
diff --git a/django/core/template/defaulttags.py b/django/core/template/defaulttags.py
index 518498664d..daad1c2dfa 100644
--- a/django/core/template/defaulttags.py
+++ b/django/core/template/defaulttags.py
@@ -249,6 +249,14 @@ class NowNode(Node):
df = DateFormat(datetime.now())
return df.format(self.format_string)
+class SpacelessNode(Node):
+ def __init__(self, nodelist):
+ self.nodelist = nodelist
+
+ def render(self, context):
+ from django.utils.html import strip_spaces_between_tags
+ return strip_spaces_between_tags(self.nodelist.render(context).strip())
+
class TemplateTagNode(Node):
mapping = {'openblock': BLOCK_TAG_START,
'closeblock': BLOCK_TAG_END,
@@ -726,6 +734,12 @@ def regroup(parser, token):
return RegroupNode(target, expression, var_name)
regroup = register.tag(regroup)
+def spaceless(parser, token):
+ nodelist = parser.parse(('endspaceless',))
+ parser.delete_first_token()
+ return SpacelessNode(nodelist)
+spaceless = register.tag(spaceless)
+
#@register.tag
def templatetag(parser, token):
"""
diff --git a/django/utils/html.py b/django/utils/html.py
index 730744c9e1..d89067106e 100644
--- a/django/utils/html.py
+++ b/django/utils/html.py
@@ -37,6 +37,10 @@ def strip_tags(value):
"Returns the given HTML with all tags stripped"
return re.sub(r'<[^>]*?>', '', value)
+def strip_spaces_between_tags(value):
+ "Returns the given HTML with spaces between tags stripped"
+ return re.sub(r'>\s+<', '><', value)
+
def strip_entities(value):
"Returns the given HTML with all entities (&something;) stripped"
return re.sub(r'&(?:\w+|#\d);', '', value)
diff --git a/docs/templates.txt b/docs/templates.txt
index d4bb468bd5..0fbe1f6ae8 100644
--- a/docs/templates.txt
+++ b/docs/templates.txt
@@ -663,6 +663,34 @@ i.e.::
{% regroup people|dictsort:"gender" by gender as grouped %}
+spaceless
+~~~~~~~~~
+
+**New in Django development version.**
+
+Strips whitespace between HTML tags. This includes tab characters and newlines.
+
+Example usage::
+
+ {% spaceless %}
+ <p>
+ <a href="foo/">Foo</a>
+ </p>
+ {% spaceless %}
+
+This example would return this HTML::
+
+ <p><a href="foo/">Foo</a></p>
+
+Only space between *tags* is stripped -- not space between tags and text. In
+this example, the space around ``Hello`` won't be stripped::
+
+ {% spaceless %}
+ <strong>
+ Hello
+ </strong>
+ {% spaceless %}
+
ssi
~~~
diff --git a/tests/othertests/templates.py b/tests/othertests/templates.py
index f4f94e579d..5e3afd01e4 100644
--- a/tests/othertests/templates.py
+++ b/tests/othertests/templates.py
@@ -298,6 +298,11 @@ TEMPLATE_TESTS = {
gentlemen.
"""),
+ # {% spaceless %} tag
+ 'spaceless01': ("{% spaceless %} <b> <i> text </i> </b> {% endspaceless %}", {}, "<b><i> text </i></b>"),
+ 'spaceless02': ("{% spaceless %} <b> \n <i> text </i> \n </b> {% endspaceless %}", {}, "<b><i> text </i></b>"),
+ 'spaceless03': ("{% spaceless %}<b><i>text</i></b>{% endspaceless %}", {}, "<b><i>text</i></b>"),
+
# simple translation of a string delimited by '
'i18n01': ("{% load i18n %}{% trans 'xxxyyyxxx' %}", {}, "xxxyyyxxx"),