]> git.parisson.com Git - telemeta.git/commitdiff
make the dl_field template tag more django-like
authorolivier <>
Wed, 27 Jan 2010 14:46:10 +0000 (14:46 +0000)
committerolivier <>
Wed, 27 Jan 2010 14:46:10 +0000 (14:46 +0000)
telemeta/templates/telemeta_default/collection_detail.html
telemeta/templatetags/telemeta_utils.py

index 98160517b4026c709cf5c287f2d08163f644a6a7..fa915b92451b5eb6765dc421a06e2ee82f781e87 100644 (file)
         <div class="infos">\r
         {% block general_info %}\r
             <dl class="listing">\r
-                {% dl_field collection.title %}\r
-                {% dl_field collection.alt_title %}\r
-                {% dl_field collection.creator %}\r
+                {% dl_field collection "title" %}\r
+                {% dl_field collection "alt_title" %}\r
+                {% dl_field collection "creator" %}\r
                 {% if collection.recorded_from_year %}\r
                 <dt>{% trans "Recording year" %}</dt>\r
                 <dd>{{ collection.recorded_from_year }} {{ collection.recorded_to_year|prepend:" - "  }}</dd>\r
                 {% endif %}\r
-                {% dl_field collection.year_published %}\r
+                {% dl_field collection "year_published" %}\r
             </dl>\r
         {% endblock general_info %}\r
         </div>\r
@@ -61,8 +61,8 @@
                 <h4><a href="#">{% trans "Geographic and cultural informations" %}</a></h4>\r
                 <div>\r
                     <dl class="listing">\r
-                    {% dl_field collection.countries join with ", " %}\r
-                    {% dl_field collection.ethnic_groups join with ", " %}\r
+                    {% dl_field collection "countries" join with ", " %}\r
+                    {% dl_field collection "ethnic_groups" join with ", " %}\r
                     </dl>\r
                 </div>\r
             </div>\r
                     <dl class="listing">\r
                         {% if collection.collector_is_creator %}\r
                           {% if collection.creator %}\r
-                          <dt>{% trans "Collector" %}</dt><dd>{{ collector.creator }}</dd>\r
+                          <dt>{% trans "Collector" %}</dt><dd>{{ collection.creator }}</dd>\r
                           {% endif%}\r
                         {% else %}\r
-                        {% dl_field collection.collector %}\r
+                        {% dl_field collection "collector" %}\r
                         {% endif %}\r
-                        {% dl_field collection.publisher %}\r
-                        {% dl_field collection.publisher_collection %}\r
-                        {% dl_field collection.publisher_serial %}\r
-                        {% dl_field collection.booklet_author %}\r
-                        {% dl_field collection.external_references %}\r
-                        {% dl_field collection.doctype_code %}\r
-                        {% dl_field collection.public_access %}\r
-                        {% dl_field collection.legal_rights %}\r
+                        {% dl_field collection "publisher" %}\r
+                        {% dl_field collection "publisher_collection" %}\r
+                        {% dl_field collection "publisher_serial" %}\r
+                        {% dl_field collection "booklet_author" %}\r
+                        {% dl_field collection "external_references" %}\r
+                        {% dl_field collection "doctype_code" %}\r
+                        {% dl_field collection "public_access" %}\r
+                        {% dl_field collection "legal_rights" %}\r
                     </dl>\r
                 </div>\r
             </div>\r
                 <h4><a href="#">{% trans "Archiving data" %}</a></h4>\r
                 <div>\r
                     <dl class="listing">\r
-                        {% dl_field collection.acquisition_mode %}\r
-                        {% dl_field collection.cnrs_contributor %}\r
-                        {% dl_field collection.metadata_writer %}\r
-                        {% dl_field collection.booklet_description %}\r
-                        {% dl_field collection.publishing_status %}\r
-                        {% dl_field collection.alt_ids %}\r
-                        {% dl_field collection.comment %}\r
-                        {% dl_field collection.metadata_writer %}\r
-                        {% dl_field collection.travail %}\r
-                        {% dl_field collection.items_done %}\r
+                        {% dl_field collection "acquisition_mode" %}\r
+                        {% dl_field collection "cnrs_contributor" %}\r
+                        {% dl_field collection "metadata_writer" %}\r
+                        {% dl_field collection "booklet_description" %}\r
+                        {% dl_field collection "publishing_status" %}\r
+                        {% dl_field collection "alt_ids" %}\r
+                        {% dl_field collection "comment" %}\r
+                        {% dl_field collection "metadata_writer" %}\r
+                        {% dl_field collection "travail" %}\r
+                        {% dl_field collection "items_done" %}\r
                     </dl>\r
                 </div>\r
             </div>\r
                 <h4><a href="#">{% trans "Technical data" %}</a></h4>\r
                 <div>\r
                     <dl class="listing">\r
-                        {% dl_field collection.code %}\r
-                        {% dl_field collection.old_code %}\r
+                        {% dl_field collection "code" %}\r
+                        {% dl_field collection "old_code" %}\r
                         <dt>{% trans "Media type" %}</dt><dd>{% trans "Audio" %}</dd>\r
-                        {% dl_field collection.approx_duration %}\r
-                        {% dl_field collection.computed_duration %}\r
-                        {% dl_field collection.physical_items_num %}\r
+                        {% dl_field collection "approx_duration" %}\r
+                        {% dl_field collection "computed_duration" %}\r
+                        {% dl_field collection "physical_items_num" %}\r
                         <dt>{% trans "Number of items" %}</dt><dd>{{ collection.items.count }}</dd>\r
-                        {% dl_field collection.physical_format %}\r
-                        {% dl_field collection.ad_conversion %}\r
+                        {% dl_field collection "physical_format" %}\r
+                        {% dl_field collection "ad_conversion" %}\r
                     </dl>\r
                 </div>\r
             </div>\r
index 0fb014d4fc97d5e335f22d6f16c0da50f1af5ab9..e92cbfdf64a0f953df758fde19ca31a9bd25ffec 100644 (file)
@@ -98,18 +98,21 @@ def to_dublincore(resource):
         return dc.express_collection(resource)
 
 class DescriptionListFieldNode(template.Node):
-    def __init__(self, variable, join_with = None):
-        cut   = variable.split('.')
-        self.model  = template.Variable('.'.join(cut[:-1]))
-        self.member = cut[-1]
+    def __init__(self, model, attr, join_with = None):
+        self.model  = model
+        self.member = attr
         self.join_with = join_with
 
     def render(self, context):
         try:
             model = self.model.resolve(context)
-            label = html.escape(capfirst(unicode(model.field_label(self.member))))
+            if isinstance(self.member, template.Variable):
+                member = self.member.resolve(context)
+            else:
+                member = self.member
+            label = html.escape(capfirst(unicode(model.field_label(member))))
             try:
-                value = getattr(model, self.member)
+                value = getattr(model, member)
             except AttributeError:
                 value = '<ERROR: no such field>'
         except template.VariableDoesNotExist:
@@ -134,10 +137,10 @@ def dl_field(parser, token):
     cut = token.split_contents()
     join_with = None
     try:
-        tag_name, variable = cut
+        tag_name, model, attr = cut
     except ValueError:
         try:
-            tag_name, variable, arg3, arg4, arg5  = cut
+            tag_name, model, attr, arg3, arg4, arg5  = cut
             if arg3 == 'join' and arg4 == 'with'and arg5[0] == arg5[-1] and arg5[0] in ('"', "'"):
                 join_with = arg5[1:-1]
             else:
@@ -146,7 +149,12 @@ def dl_field(parser, token):
             raise template.TemplateSyntaxError("%r tag: invalid arguments" 
                                                % token.contents.split()[0])
 
-    return DescriptionListFieldNode(variable, join_with=join_with)
+    if attr[0] == attr[-1] and attr[0] in ('"', "'"):
+        attr = attr[1:-1]
+    else:
+        attr = template.Variable(attr)
+    model = template.Variable(model)
+    return DescriptionListFieldNode(model, attr, join_with=join_with)
 
 @register.filter
 def prepend(str, prefix):