2009-03-19 28 views
12

Sto provando ad usare l'admin datepicker nelle mie forme di django.django: using admin datepicker

Circa seguito della discussione qui: http://www.mail-archive.com/[email protected]/msg72138.html

Sono

a) Nel mio forms.py inclusa la linea

from django.contrib.admin import widgets 

b) e ha usato il widget di come questo:

date = forms.DateTimeField(widget=widgets.AdminDateWidget()) 

c) E nel mio modello attuale ho aggiunto:

{{form.media}} 

per includere il JS/stili ecc

Tuttavia, quando cerco di vedere la mia forma non ottengo alcuna widget piacevole; solo una normale casella di testo. E il Firefox javascript console degli errori mi mostra:

gettext non è definito nel calendar.js (linea 26)

e

addEvent non è definito in DateTimeShortcuts.js (linea 254)

Eventuali suggerimenti? Si tratta di un bug nella libreria javascript di Django?

Aggiornamento: In sostanza, è necessario includere il nucleo e (o falso) l'i18lization

Aggiornamento 2: Carl sottolinea questo è praticamente un duplicato di Using Django time/date widgets in custom form (pur partendo da una posizione diversa)

+0

Questa domanda è una copia. Vedere la risposta qui: http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form/38916#38916 –

+0

grazie ... divertente, che non è comparso in una qualsiasi delle "domande correlate" O nella barra laterale qui o quando stavo scrivendo la domanda – interstar

+0

La risposta alla domanda riferimenti di Carl Meyer, chiarisce che questa è una risposta che richiede molto lavoro, più della semplice implementazione della propria datepicker usando jQuery o qualche altra libreria ben nota. – rossdavidh

risposta

5

No, non è un bug.

Sta cercando di chiamare la funzione di internazionalizzazione gettext() in js. È possibile eseguire l'internazionalizzazione di js in modo molto simile a come lo si fa in codice Python o nei modelli, è solo una caratteristica meno conosciuta.

Se non si utilizza l'internazionalizzazione di js nel proprio progetto, è sufficiente inserirla.

<script>function gettext(txt){ return txt }</script> 

nel modello principale in modo che l'interprete js non soffochi.

Questo è un modo hacky per risolverlo, lo so.

Edit:

Oppure è possibile includere il jsi18n esatto js riferimenti di amministrazione Django per farlo funzionare anche con altri linguaggi. Non so quale sia.

Questo è stato pubblicato il django-utenti di oggi:

http://groups.google.com/group/django-users/browse_thread/thread/2f529966472c479d#

forse era lei, in ogni caso, per ogni evenienza.

+0

grazie ... sì, è un hacker, ma mi ha superato il problema come una soluzione temporanea – interstar

+0

Grazie per il link, è stato ben scritto e reso chiaro il processo, e mi sento un po 'meno hacky. – monkut

2

penso che ho risolto il primo tempo con l'aggiunta in modo esplicito queste righe per il mio modello:

<script type="text/javascript" src="../../../jsi18n/"></script> 
<script type="text/javascript" src="/admin_media/js/core.js"></script> 
<script type="text/javascript" src="/admin_media/js/admin/RelatedObjectLookups.js"></script> 

Ma ancora non rapporti sapendo getText

+1

non è il caso di aggiungere jsi18n se non lo hai nei tuoi mapping url. è lì che si troverà la funzione gettext se aggiungerai la cosa giusta in urls.py: urlpatterns = patterns ('', (r '^ jsi18n/(? P \ S +?)/$', 'django.views. i18n.javascript_catalog '), ) – Vasil

+0

buon punto ... anche se ho trovato quella linea anche nel modulo di amministrazione. Quindi presumo funzioni su questo server. In tal caso ... perché per loro se non io. Forse perché è relativo nell'albero degli amministratori lì. – interstar

+0

:) sì, ma è un uri relativo, quindi se riesci a capire cosa risolve nei modelli di amministrazione, puoi inserirlo come url assoluto e farlo funzionare. Penso che in questo modo funzionerà l'adeguata internazionalizzazione di DatePicker. – Vasil

1

Si possono trovare le seguenti opere per voi:

<link href="/media/css/base.css" rel="stylesheet" type="text/css" media="screen" /> 
<script type="text/javascript" src="/admin/jsi18n/"></script> 
<script type="text/javascript" src="/media/js/core.js"></script> 
{{ form.media }}