no thumbnail for no image
[redakcja.git] / apps / forms_builder / forms / templatetags / forms_builder_tags.py
1 from __future__ import unicode_literals
2 from future.builtins import str
3
4 from django import template
5 from django.template.loader import get_template
6
7 from forms_builder.forms.forms import FormForForm
8 from forms_builder.forms.models import Form
9
10
11 register = template.Library()
12
13
14 class BuiltFormNode(template.Node):
15
16     def __init__(self, name, value):
17         self.name = name
18         self.value = value
19
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)
27             try:
28                 form = Form.objects.get(**{str(self.name): lookup_value})
29             except Form.DoesNotExist:
30                 form = None
31         else:
32             form = template.Variable(self.value).resolve(context)
33         if not isinstance(form, Form) or not form.published(for_user=user):
34             return ""
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)
40
41
42 @register.tag
43 def render_built_form(parser, token):
44     """
45     render_build_form takes one argument in one of the following formats:
46
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 %}
51
52     """
53     try:
54         _, arg = token.split_contents()
55         if "=" not in arg:
56             arg = "form=" + arg
57         name, value = arg.split("=", 1)
58         if name not in ("form", "id", "slug"):
59             raise ValueError
60     except ValueError:
61         e = ()
62         raise template.TemplateSyntaxError(render_built_form.__doc__)
63     return BuiltFormNode(name, value)