# HG changeset patch # User Gustavo Andres Morero # Date 1504213962 10800 # Thu Aug 31 18:12:42 2017 -0300 # Node ID b6a8be49762d15f9bb37d1c20dffaf5d06aa5341 # Parent daf115c557266d5e7de4b69b668350a1869d6016 changes to allow passing a list of forms/ids to inclusion template tag. diff --git a/form_guard/templates/form_guard/js_snippet.html b/form_guard/templates/form_guard/js_snippet.html --- a/form_guard/templates/form_guard/js_snippet.html +++ b/form_guard/templates/form_guard/js_snippet.html @@ -1,14 +1,30 @@ diff --git a/form_guard/templatetags/form_guard_tags.py b/form_guard/templatetags/form_guard_tags.py --- a/form_guard/templatetags/form_guard_tags.py +++ b/form_guard/templatetags/form_guard_tags.py @@ -11,9 +11,16 @@ return isinstance(obj, str) +def get_form_field_id(obj): + if is_string(obj): + return obj + else: + return obj.fields[obj.FORM_GUARD_FIELD_NAME].widget.attrs.get('id') + + @register.inclusion_tag('form_guard/js_snippet.html', takes_context=True) -def form_guard_js(context, form): - if is_string(form): - return {'FORM_GUARD_FIELD_ID': form} - field_id = form.fields[form.FORM_GUARD_FIELD_NAME].widget.attrs.get('id') - return {'FORM_GUARD_FIELD_ID': field_id} +def form_guard_js(context, *args): + if not args: + raise template.TemplateSyntaxError( + 'No argument provided for form_guard_js tag.') + return {'field_ids': [str(get_form_field_id(arg)) for arg in args]} diff --git a/form_guard/tests.py b/form_guard/tests.py --- a/form_guard/tests.py +++ b/form_guard/tests.py @@ -5,6 +5,7 @@ from django.forms.fields import CharField from django.test.utils import override_settings from django.core.exceptions import PermissionDenied +from django.template import TemplateSyntaxError from .forms import FormGuardForm from .settings import FORM_GUARD_MIN_VALUE @@ -66,9 +67,15 @@ def test_template_tag(self): # argument is antispam field id (string) ret = form_guard_js({}, 'field_id') - self.assertEqual(ret, {'FORM_GUARD_FIELD_ID': 'field_id'}) + self.assertEqual(ret, {'field_ids': ['field_id']}) # argument is a form instance form = FormGuardForm() ret = form_guard_js({}, form) fid = form.fields[form.FORM_GUARD_FIELD_NAME].widget.attrs.get('id') - self.assertEqual(ret, {'FORM_GUARD_FIELD_ID': fid}) + self.assertEqual(ret, {'field_ids': [fid]}) + # mixed arguments + ret = form_guard_js({}, 'field_id', form) + self.assertEqual(ret, {'field_ids': ['field_id', fid]}) + # no arguments + self.assertRaises( + TemplateSyntaxError, lambda: form_guard_js({}))