app/soc/views/helper/templatetags/forms_helpers.py
author Sverre Rabbelier <srabbelier@gmail.com>
Thu, 08 Jan 2009 21:23:15 +0000
changeset 785 c740d0129cce
parent 754 ed78bb93a287
child 794 19c24508c398
permissions -rw-r--r--
Added a twoline_edit.html page An as_twoline_edit template tag was added for this purpose. This tag renders the label field on a seperate line. Patch by: Sverre Rabbelier
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
38
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     1
#!/usr/bin/python2.5
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     2
#
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     3
# Copyright 2008 the Melange authors.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     4
#
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     5
# Licensed under the Apache License, Version 2.0 (the "License");
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     6
# you may not use this file except in compliance with the License.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     7
# You may obtain a copy of the License at
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     8
#
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
     9
#   http://www.apache.org/licenses/LICENSE-2.0
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    10
#
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    11
# Unless required by applicable law or agreed to in writing, software
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    12
# distributed under the License is distributed on an "AS IS" BASIS,
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    13
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    14
# See the License for the specific language governing permissions and
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    15
# limitations under the License.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    16
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    17
"""A Django template tag library containing forms helpers.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    18
"""
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    19
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    20
__authors__ = [
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    21
  '"Todd Larsen" <tlarsen@google.com>',
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    22
  '"Pawel Solyga" <pawel.solyga@gmail.com>',
741
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
    23
  '"Sverre Rabbelier" <sverre@rabbelier.nl>',
38
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    24
  ]
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    25
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    26
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    27
from django import template
741
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
    28
from django.forms import forms as forms_in
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
    29
from django.utils.encoding import force_unicode
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
    30
from django.utils.html import escape
316
9efdc7bc3565 Add missing blank lines between imports and sort all of the imports.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 273
diff changeset
    31
322
6641e941ef1e Fixed imports sorting based on comments for r751.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 316
diff changeset
    32
38
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    33
register = template.Library()
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    34
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    35
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    36
@register.inclusion_tag('soc/templatetags/_field_as_table_row.html')
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    37
def field_as_table_row(field):
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    38
  """Prints a newforms field as a table row.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    39
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    40
  This function actually does very little, simply passing the supplied
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    41
  form field instance in a simple context used by the _field_as_table_row.html
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    42
  template (which is actually doing all of the work).
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    43
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    44
  See soc/templates/soc/templatetags/_field_as_table_row.html for the CSS
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    45
  styles used by this template tag.
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    46
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    47
  Usage:
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    48
    {% load forms_helpers %}
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    49
    ...
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    50
    <table>
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    51
     {% field_as_table_row form.fieldname %}
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    52
     ...
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    53
    </table>
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    54
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    55
  Args:
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    56
    field: a Django newforms field instance
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    57
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    58
  Returns:
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    59
    a simple context containing the supplied newforms field instance:
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    60
      { 'field': field }
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    61
  """
9a6ee3ab1446 A {% field_as_table_row %} template tag to simplify custom forms.
Todd Larsen <tlarsen@google.com>
parents:
diff changeset
    62
  return {'field': field}
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    63
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    64
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    65
@register.inclusion_tag('soc/templatetags/_readonly_field_as_table_row.html')
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    66
def readonly_field_as_table_row(field_label, field_value):
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    67
  """Prints a field value and it's verbose name as a table row.
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    68
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    69
  This function actually does very little, simply passing the 
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    70
  supplied field_label and field_value in a simple context used by the 
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    71
  _readonly_field_as_table_row.html template (which is actually 
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    72
  doing all of the work).
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    73
744
cd9bf163473c Add missing dots, fix imports sorting and too long lines in different modules. Add TODO in soc.views.models.host module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 741
diff changeset
    74
  See soc/templates/soc/templatetags/_readonly_field_as_table_row.html for
cd9bf163473c Add missing dots, fix imports sorting and too long lines in different modules. Add TODO in soc.views.models.host module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 741
diff changeset
    75
  the CSS styles used by this template tag.
99
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    76
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    77
  Usage:
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    78
    {% load forms_helpers %}
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    79
    ...
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    80
    <table>
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    81
     {% readonly_field_as_table_row field_label field_value %}
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    82
     ...
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    83
    </table>
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    84
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    85
  Args:
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    86
    field_label: label of the field to render
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    87
    field_value: value of the field to render
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    88
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    89
  Returns:
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    90
    a simple context containing the supplied newforms field instance:
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    91
      { 'field_label': field_label',
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    92
        'field_value': field_value'}
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    93
  """
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    94
  return {'field_label': field_label,
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    95
          'field_value': field_value}
8c38b546a3cf Added public view support (not using controller yet)
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 54
diff changeset
    96
728
602c2b2f4d8b Added a readonly_multiline_field_as_table_row tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 322
diff changeset
    97
744
cd9bf163473c Add missing dots, fix imports sorting and too long lines in different modules. Add TODO in soc.views.models.host module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 741
diff changeset
    98
@register.inclusion_tag(
cd9bf163473c Add missing dots, fix imports sorting and too long lines in different modules. Add TODO in soc.views.models.host module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 741
diff changeset
    99
    'soc/templatetags/_readonly_multiline_field_as_table_row.html')
728
602c2b2f4d8b Added a readonly_multiline_field_as_table_row tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 322
diff changeset
   100
def readonly_multiline_field_as_table_row(field_label, field_value):
744
cd9bf163473c Add missing dots, fix imports sorting and too long lines in different modules. Add TODO in soc.views.models.host module.
Pawel Solyga <Pawel.Solyga@gmail.com>
parents: 741
diff changeset
   101
  """See readonly_field_as_table_row, but with a different template tag.
728
602c2b2f4d8b Added a readonly_multiline_field_as_table_row tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 322
diff changeset
   102
  """
602c2b2f4d8b Added a readonly_multiline_field_as_table_row tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 322
diff changeset
   103
  return {'field_label': field_label,
602c2b2f4d8b Added a readonly_multiline_field_as_table_row tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 322
diff changeset
   104
          'field_value': field_value}
741
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   105
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   106
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   107
@register.inclusion_tag('soc/templatetags/_as_table.html')
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   108
def as_table(form):
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   109
  """Outputs a form as a properly formatted html table
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   110
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   111
  Args:
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   112
    form: the form that should be converted to a table
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   113
  """
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   114
785
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   115
  return as_table_helper(form)
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   116
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   117
@register.inclusion_tag('soc/templatetags/_as_twoline_table.html')
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   118
def as_twoline_table(form):
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   119
  """Outputs a form as a properly formatted html table
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   120
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   121
  Args:
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   122
    form: the form that should be converted to a table
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   123
  """
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   124
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   125
  return as_table_helper(form)
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   126
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   127
def as_table_helper(form):
741
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   128
  fields = []
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   129
  hidden_fields = []
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   130
  hidden_fields_errors = []
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   131
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   132
  # Iterate over all fields and prepare it for adding 
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   133
  for name, field in form.fields.items():
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   134
    bf = forms_in.BoundField(form, field, name)
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   135
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   136
    # If the field is hidden we display it elsewhere
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   137
    if not bf.is_hidden:
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   138
      example_text = ''
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   139
      if hasattr(field, 'example_text'):
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   140
        example_text = force_unicode(field.example_text)
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   141
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   142
      item = (bf, field.required, example_text)
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   143
      fields.append(item)
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   144
    else:
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   145
      hidden_fields.append(unicode(bf))
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   146
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   147
      for e in bf.errors:
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   148
        item = (name, force_unicode(e))
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   149
        hidden_fields_errors.append(item)
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   150
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   151
  return {
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   152
      'top_errors': form.non_field_errors() or '',
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   153
      'hidden_field_errors': hidden_fields_errors or '',
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   154
      'form': form,
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   155
      'fields': fields or '',
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   156
      'hidden_fields': hidden_fields or '',
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   157
      }
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   158
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   159
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   160
@register.inclusion_tag('soc/templatetags/_as_table_row.html')
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   161
def as_table_row(form, field, required, example_text):
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   162
  """Outputs a field as a properly formatted html row
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   163
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   164
  Args:
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   165
    form: the form that the row belongs to
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   166
    field: the field that should be converted to a row
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   167
    required: whether the field is required
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   168
    example_text: the example_text for this row
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   169
  """
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   170
785
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   171
  return as_table_row_helper(form, field, required, example_text)
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   172
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   173
@register.inclusion_tag('soc/templatetags/_as_twoline_table_row.html')
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   174
def as_twoline_table_row(form, field, required, example_text):
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   175
  """Outputs a field as a properly formatted html row
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   176
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   177
  Args:
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   178
    form: the form that the row belongs to
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   179
    field: the field that should be converted to a row
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   180
    required: whether the field is required
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   181
    example_text: the example_text for this row
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   182
  """
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   183
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   184
  return as_table_row_helper(form, field, required, example_text)
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   185
c740d0129cce Added a twoline_edit.html page
Sverre Rabbelier <srabbelier@gmail.com>
parents: 754
diff changeset
   186
def as_table_row_helper(form, field, required, example_text):
741
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   187
  # Escape and cache in local variable.
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   188
  errors = [force_unicode(escape(error)) for error in field.errors]
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   189
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   190
  if field.label:
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   191
    label = escape(force_unicode(field.label))
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   192
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   193
    # Only add the suffix if the label does not end in punctuation.
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   194
    if form.label_suffix and (label[-1] not in ':?.!'):
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   195
      label += form.label_suffix
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   196
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   197
    label = field.label_tag(label) or ''
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   198
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   199
  field_class_type = 'formfield%slabel' % ('error' if errors else '')
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   200
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   201
  help_text = field.help_text
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   202
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   203
  return {
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   204
      'help_text': force_unicode(help_text) if help_text else '',
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   205
      'field_class_type': field_class_type,
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   206
      'label': force_unicode(label) if field.label else '',
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   207
      'field': unicode(field),
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   208
      'required': required,
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   209
      'example_text': example_text,
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   210
      'errors': errors,
2dc2c65c5f76 Converted as_table to be a template tag
Sverre Rabbelier <srabbelier@gmail.com>
parents: 728
diff changeset
   211
      }