def breadcrumbs(request, context={}, resolver_match=None, path=None): if path.endswith('/'): path = path[:-1] if path != request.path: return obj = context['object'] breadcrumb_list = [] while isinstance(obj, IndexableFedoraObject): object_id = id_from_path(obj.pk, initkwargs.get('fedora_prefix', None)) if object_id: breadcrumb_list.insert(0, ( reverse('%s:%s' % (resolver_match.app_name, resolver_match.url_name), kwargs={'id': object_id}), str(rdf2lang(obj.title)) )) else: # reached root of the portion of repository given by fedora_prefix break parent_id = obj.fedora_parent_uri if parent_id: obj = FedoraObject.objects.get(pk=parent_id) else: # reached root of the repository break return breadcrumb_list
def _get_title(): try: idd = id if fedora_prefix: idd = fedora_prefix + '/' + idd return rdf2lang(FedoraObject.objects.get(pk=idd).title, lang=lang) except: import traceback traceback.print_exc() return None
def _format_value(self, value): from fedoralink_ui.templatetags.fedoralink_tags import rdf2lang if isinstance(value, StringLikeList): # TODO: implement correctly multi-valued fields !!! print("Bad implementation - implement correctly multi-valued fields!") if len(value)>0: value = value[0] else: value = None if isinstance(value, FedoraObject): if DC.title in value.metadata: value = (rdf2lang(value.metadata[DC.title]), str(value.id)) else: value = (str(value.id), str(value.id)) return value
def cache_breadcrumbs(obj): if getattr(settings, 'USE_BREADCRUMBS'): from django.core.cache import cache from fedoralink_ui.templatetags.fedoralink_tags import rdf2lang import django.utils.translation lang = django.utils.translation.get_language() if cache.get('title__%s/__%s' % (obj.local_id, lang)): return local_id = obj.local_id prefix = obj.id[:-len(local_id)] ids = local_id.split('/') ids = [prefix + '/'.join(ids[:k]) for k in range(1, len(ids) + 1)] for found_obj in DCObject.objects.filter(pk__in=ids): cache.set('title__%s__%s' % (found_obj.local_id, lang), rdf2lang(found_obj.title, lang=lang), 3600)