2011-02-08 17 views
6

Mi piacerebbe aggiungere l'anno in un blocco di Django, usando la sintassi di seguito.Usa 'now' in django blocktrans?

{% blocktrans with now|date:"Y" as copydate %} 
    © {{ copydate }} Company 
{% endblocktrans %} 

Questo è simile a questo ticket esistente Django (http://code.djangoproject.com/ticket/3088), che a quanto pare dovrebbe funzionare ora, ma non posso andare al lavoro neanche.

In entrambi i casi il tag non viene semplicemente espanso, ma il resto dei blocktrans viene visualizzato correttamente.

risposta

10

L'unico modo è quello di ottenere la data in pitone e utilizzare il filtro data Reiner propone o definire il proprio templatetag. È possibile creare un piccolo processore di contesto per impostare la data nel proprio contesto.

def my_date(request): 
  import datetime 
  return {'my_date':datetime.datetime.now()} 

e aggiungere questo in settings.py

TEMPLATE_CONTEXT_PROCESSORS = DEFAULT_SETTINGS.TEMPLATE_CONTEXT_PROCESSORS + (
     'the_package_of_my_tiny_function.my_date', 
    ) 

utilizzare nel vostro template in questo modo:

{% blocktrans with my_date|date:"Y" as copydate %} 
     © {{ copydate }} Company 
    {% endblocktrans %} 

Non dimenticate di passare RequestContext come context_instance nelle viste

Here è l'esempio.

+1

Ciao Miga, ho contrassegnato questo come la migliore risposta, ma potresti espandere la risposta sopra per includere l'esempio completo dal tuo blog? Grazie. – mikemaccana

+0

Dovrebbe essere migliore ora. – miga

1

Il tag now restituisce una data formattata come stringa corrispondente al formato passato. date probabilmente ha bisogno di un oggetto datetime/date. Quindi incatenarli insieme non funzionerebbe.

Non sono nemmeno sicuro se è possibile utilizzare il tag now nell'istruzione with, ma provare questo.

{% blocktrans with now "Y" as copydate %} 

now accetta la stessa stringa formato date. Se questo non funziona, la mia migliore scommessa sarebbe semplicemente passare il modello a datetime.datetime.now() risultato, e usare quello invece di now.

{% blocktrans with my_date|date:"Y" as copydate %} 
+0

Grazie Reiner! 1. "con ora" Y "come copydate" non è la sintassi corretta, sembra che sia necessario un filtro modello. 2. Funzionerebbe, ma preferirei non passare esplicitamente ogni modello alla data. 3. Non funziona come "blocktrans" non consente altri tag di blocco al suo interno. Grazie ancora per la risposta. – mikemaccana

+0

@nailer Ah grazie, ho rimosso quel suggerimento. Hai provato l'altro per caso? –

+0

Reiner: sì, aggiornato il mio commento sopra per gli altri suggerimenti. – mikemaccana

Problemi correlati