2012-07-30 13 views
11

Se ho una variabile di modello chiamato NUM_COUNTRIES, al plurale con Django ho potuto solo scrivere qualcosa del genere:Come pluralizzare un nome in un modello con jinja2?

countr{{ num_countries|pluralize:"y,ies" }} 

C'è un modo per fare qualcosa di simile con Jinja2? (So ​​che questo non funziona in jinja2) Qual è l'alternativa jinja2 a questo?

Grazie per qualsiasi suggerimento!

risposta

3

Secondo la documentazione di Jinja, non esiste lo built in filter che fa quello che vuoi. Si può facilmente progettare un custom filter per farlo, però:

def my_plural(str, end_ptr = None, rep_ptr = ""): 
    if end_ptr and str.endswith(end_ptr): 
     return str[:-1*len(end_ptr)]+rep_ptr 
    else: 
     return str+'s' 

e quindi registrarlo nel proprio ambiente:

environment.filters['myplural'] = my_plural 

È ora possibile utilizzare my_plural come modello Jinja.

-6

Si desidera anche verificare se la parola è già plurale. Qui è la mia soluzione:

def pluralize(text): 
    if text[-1:] !='s': 
     return text+'s' 
    else: 
     return text 

quindi registrare il tag per l'ambiente (questo può essere applicato al motore di template Django troppo).

+5

Non è così che funziona la pluralizzazione. – poxip

21

La risposta di Guy Adini è sicuramente la strada da percorrere, anche se penso (o forse ho abusato di esso) non è esattamente la stessa di pluralizzare il filtro in Django.

Quindi questo era mia implementazione (utilizzando decoratore per registrare)

@app.template_filter('pluralize') 
def pluralize(number, singular = '', plural = 's'): 
    if number == 1: 
     return singular 
    else: 
     return plural 

In questo modo, è usato esattamente nello stesso modo (bene, con i parametri che vengono passati in modo leggermente diverso):

countr{{ num_countries|pluralize:("y","ies") }} 
+0

Sembra che non sia necessario il punto e virgola quando si utilizza un filtro personalizzato con argomenti. Almeno non c'è alcun indizio per questo in jinja2 v.2.8 [documentazione] (http://jinja.pocoo.org/docs/dev/api/#writing-filters). Immagino che il tuo esempio dovrebbe essere corretto in questo modo: 'countr {{num_countries | pluralize (" y "," ies ")}}' – vrs

+0

21, 31, 41 paese, 11 paesi – Suor

+0

Vorrei usare 'numero% 100 in {1 , 21,31,41,51,61,71,81,91} ' – Suor

11

versioni attuali Jinja hanno il i18n extension che aggiunge di traduzione e di pluralizzazione decenti tags:

{% trans count=list|length %} 
There is {{ count }} {{ name }} object. 
{% pluralize %} 
There are {{ count }} {{ name }} objects. 
{% endtrans %} 

Puoi usarlo anche se in realtà non hai versioni in più lingue - e se aggiungerai altre lingue avrai una base decente che non richiede modifiche (non tutte le lingue si pluralizzano aggiungendo una "s" e alcune anche avere più forme plurali).

Problemi correlati