1 from __future__ import unicode_literals
2 from future.builtins import str
4 from django import template
5 from django.template.loader import get_template
7 from forms_builder.forms.forms import FormForForm
8 from forms_builder.forms.models import Form
11 register = template.Library()
14 class BuiltFormNode(template.Node):
16 def __init__(self, name, value):
20 def render(self, context):
21 request = context["request"]
22 user = getattr(request, "user", None)
23 post = getattr(request, "POST", None)
24 files = getattr(request, "FILES", None)
25 if self.name != "form":
26 lookup_value = template.Variable(self.value).resolve(context)
28 form = Form.objects.get(**{str(self.name): lookup_value})
29 except Form.DoesNotExist:
32 form = template.Variable(self.value).resolve(context)
33 if not isinstance(form, Form) or not form.published(for_user=user):
35 t = get_template("forms/includes/built_form.html")
36 context["form"] = form
37 form_args = (form, context, post or None, files or None)
38 context["form_for_form"] = FormForForm(*form_args)
39 return t.render(context)
43 def render_built_form(parser, token):
45 render_build_form takes one argument in one of the following formats:
47 {% render_build_form form_instance %}
48 {% render_build_form form=form_instance %}
49 {% render_build_form id=form_instance.id %}
50 {% render_build_form slug=form_instance.slug %}
54 _, arg = token.split_contents()
57 name, value = arg.split("=", 1)
58 if name not in ("form", "id", "slug"):
62 raise template.TemplateSyntaxError(render_built_form.__doc__)
63 return BuiltFormNode(name, value)