def data_table_attr(context, attr, verbose_name=None, obj=None, caps=False): if obj is None: obj = context['object'] value = obj for attr_part in attr.split('.'): if value is None: break value = getattr(value, attr_part) if callable(value): value = value() if not value: return {} # Renders value using language preferences (as in a template). sub_context = copy(context) sub_context['value'] = value value = Template('{{ value }}').render(sub_context) if verbose_name is None: try: verbose_name = obj._meta.get_field(attr.split('.')[0]).verbose_name except FieldDoesNotExist: verbose_name = getattr(obj, attr).short_description if caps: value = capfirst(value.strip()) return { 'verbose_name': verbose_name, 'value': value, }
def famous_event(context, n=10): """ Affiche l’un des ``n`` événements les plus documentés. Or les événements les plus documentés sont généralement les plus remarquable. """ request = context['request'] out = h3(ugettext('Événement à la une')) data = Source.objects \ .filter(evenements__isnull=False).values('evenements') \ .annotate(n_sources=Count('pk')).order_by('-n_sources') \ .values_list('evenements', 'n_sources') n = min(data.count(), n) if n == 0: return '' while True: pk, n_sources = data[randrange(n)] try: e = valid_events(request).get(pk=pk) except Evenement.DoesNotExist: continue else: break out += h4(capfirst(e.debut.moment_str())) out += h4(e.debut.lieu_str(tags=False)) out += p(ugettext('On donnait %s') % event_oeuvres(e)) out += read_more(e) return out
def data_table_list_header(context): count = context['pages'].total_count() has_count = context['has_count'] has_count_if_one = context['has_count_if_one'] verbose_name = context['verbose_name'] verbose_name_plural = context['verbose_name_plural'] out = '' if has_count and (count != 1 or has_count_if_one): out = '%s ' % count out += force_text(verbose_name if count == 1 else verbose_name_plural) return capfirst(out)
def clean(self): data = super(OeuvreForm, self).clean() # Ensures title look like "Le Tartuffe, ou l’Imposteur.". data['prefixe_titre'] = capfirst(data.get('prefixe_titre', '')) data['titre'] = capfirst(data.get('titre', '')) data['prefixe_titre_secondaire'] = data.get('prefixe_titre_secondaire', '').lower() data['titre_secondaire'] = capfirst(data.get('titre_secondaire', '')) type_extrait = data.get('type_extrait') type_extrait_affiche = (type_extrait and type_extrait not in Oeuvre.TYPES_EXTRAIT_CACHES) if type_extrait_affiche: for fieldname in ('genre', 'tempo'): if data.get(fieldname): msg = _('« %s » ne peut être saisi avec ce type ' 'd’extrait.') % self.get_field_verbose(fieldname) self.add_error(fieldname, msg) self.add_error('type_extrait', msg) elif not (data.get('titre') or data.get('genre') or data.get('tempo')): msg = _('Un titre, un genre ou un tempo ' 'doit au moins être précisé.') self.add_error('titre', msg) self.add_error('genre', msg) self.add_error('tempo', msg) if data.get('creation_type') is None and any( data.get(k) for k in ('creation_date', 'creation_date_approx', 'creation_heure', 'creation_heure_approx', 'creation_lieu', 'creation_lieu_approx')): self.add_error( 'creation_type', _('« Type de création » doit être rempli ' 'lorsqu’on remplit la création.')) return data
def clean(self): data = super(OeuvreForm, self).clean() # Ensures title look like "Le Tartuffe, ou l’Imposteur.". data['prefixe_titre'] = capfirst(data.get('prefixe_titre', '')) data['titre'] = capfirst(data.get('titre', '')) data['prefixe_titre_secondaire'] = data.get( 'prefixe_titre_secondaire', '').lower() data['titre_secondaire'] = capfirst(data.get('titre_secondaire', '')) type_extrait = data.get('type_extrait') type_extrait_affiche = ( type_extrait and type_extrait not in Oeuvre.TYPES_EXTRAIT_CACHES) if type_extrait_affiche: for fieldname in ('genre', 'tempo'): if data.get(fieldname): msg = _('« %s » ne peut être saisi avec ce type ' 'd’extrait.') % self.get_field_verbose(fieldname) self.add_error(fieldname, msg) self.add_error('type_extrait', msg) elif not (data.get('titre') or data.get('genre') or data.get('tempo')): msg = _('Un titre, un genre ou un tempo ' 'doit au moins être précisé.') self.add_error('titre', msg) self.add_error('genre', msg) self.add_error('tempo', msg) if data.get('creation_type') is None and any( data.get(k) for k in ( 'creation_date', 'creation_date_approx', 'creation_heure', 'creation_heure_approx', 'creation_lieu', 'creation_lieu_approx')): self.add_error('creation_type', _('« Type de création » doit être rempli ' 'lorsqu’on remplit la création.')) return data
def get_field_verbose(self, fieldname): return capfirst( self._meta.model._meta.get_field(fieldname).verbose_name)