From 54ba3493be9123ad59f283e1b0e7bfb7dbac3d0c Mon Sep 17 00:00:00 2001 From: Jeremy Blanchard Date: Mon, 17 Oct 2011 11:03:01 -0700 Subject: [PATCH] Adding url() helper that wraps the django.core.urlresolvers.reverse() function. --- fake_settings.py | 3 ++- jingo/helpers.py | 7 +++++++ jingo/tests/test_helpers.py | 8 ++++++++ jingo/tests/urls.py | 6 ++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 jingo/tests/urls.py diff --git a/fake_settings.py b/fake_settings.py index f45619f..4fbf0ac 100644 --- a/fake_settings.py +++ b/fake_settings.py @@ -5,7 +5,7 @@ path = lambda *a: os.path.join(ROOT, *a) ROOT = os.path.dirname(os.path.abspath(__file__)) INSTALLED_APPS = ( 'jingo.tests.jinja_app', - 'jingo.tests.django_app' + 'jingo.tests.django_app', ) TEMPLATE_LOADERS = ( 'jingo.Loader', @@ -14,3 +14,4 @@ TEMPLATE_LOADERS = ( ) TEMPLATE_DIRS = (path('jingo/tests/templates'),) JINGO_EXCLUDE_APPS = ('django_app',) +ROOT_URLCONF = 'jingo.tests.urls' diff --git a/jingo/helpers.py b/jingo/helpers.py index 6f6c8ab..af36ac5 100644 --- a/jingo/helpers.py +++ b/jingo/helpers.py @@ -1,6 +1,7 @@ from django.utils.translation import ugettext as _ from django.template.defaulttags import CsrfTokenNode from django.utils.encoding import smart_unicode +from django.core.urlresolvers import reverse import jinja2 @@ -73,3 +74,9 @@ def field_attrs(field_inst, **kwargs): """Adds html attributes to django form fields""" field_inst.field.widget.attrs.update(kwargs) return field_inst + + +@register.function +def url(viewname, *args, **kwargs): + """Return URL using django's ``reverse()`` function.""" + return reverse(viewname, args=args, kwargs=kwargs) diff --git a/jingo/tests/test_helpers.py b/jingo/tests/test_helpers.py index 80e33df..b74e33f 100644 --- a/jingo/tests/test_helpers.py +++ b/jingo/tests/test_helpers.py @@ -119,3 +119,11 @@ def test_field_attrs(): s = render('{{ field|field_attrs(class="bar",name="baz") }}', {'field': f}) eq_(s, '') + + +def test_url(): + # urls defined in jingo/tests/urls.py + s = render('{{ url("url-args", 1, "foo") }}') + eq_(s, "/url/1/foo/") + s = render('{{ url("url-kwargs", word="bar", num=1) }}') + eq_(s, "/url/1/bar/") diff --git a/jingo/tests/urls.py b/jingo/tests/urls.py new file mode 100644 index 0000000..e0e4cba --- /dev/null +++ b/jingo/tests/urls.py @@ -0,0 +1,6 @@ +from django.conf.urls.defaults import patterns + +urlpatterns = patterns('', + (r'^url/(\d+)/(\w+)/$', lambda r: None, {}, "url-args"), + (r'^url/(?P\d+)/(?P\w+)/$', lambda r: None, {}, "url-kwargs"), +)