2009-03-19 26 views
12

Estoy tratando de usar el administrador de fecha en mis propios formularios django.django: using admin datepicker

Aproximadamente después de la discusión aquí: http://www.mail-archive.com/[email protected]/msg72138.html

He

a) En mi forms.py incluye la línea

from django.contrib.admin import widgets 

b) y utilizar el widget de esta manera:

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

c) Y en mi plantilla real he agregado:

{{form.media}} 

para incluir el JS/estilos etc.

Sin embargo, cuando intento ver mi forma no consigo ninguna widget de Niza; solo un cuadro de texto ordinario. Y el Firefox Javascript consola de errores me muestra:

gettext no se define en calendar.js (línea 26)

y

addEvent no está definido en DateTimeShortcuts.js (línea 254)

¿Alguna sugerencia? ¿Es esto un error en la biblioteca de JavaScript de Django?

Actualización: Básicamente, necesita incluir el núcleo y (o falso) la i18lization

Actualización 2: Carl señala que esto es más o menos un duplicado de Using Django time/date widgets in custom form (aunque a partir de una posición diferente)

+0

Esta pregunta es un duplicado. Vea la respuesta aquí: http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form/38916#38916 –

+0

gracias ... gracioso, eso no apareció en cualquiera de las "Preguntas relacionadas" Ya sea en la barra lateral aquí o cuando escribía la pregunta – interstar

+0

La respuesta a la pregunta a la que hace referencia Carl Meyer, deja en claro que esta es una respuesta que requiere mucho trabajo, más que solo implementar su propio datepicker utilizando jQuery o alguna otra biblioteca conocida. – rossdavidh

Respuesta

5

No, no es un error.

Está intentando llamar a la función de internacionalización gettext() en js. Puedes hacer la internacionalización de js de manera similar a como lo haces en el código o plantillas python, es solo una característica menos conocida.

Si no utiliza la internacionalización de js en su proyecto, simplemente puede ponerlo.

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

en su plantilla superior para que el intérprete js no se ahogue.

Esta es una forma hacky de resolverlo, lo sé.

Editar:

O puede incluir la jsi18n exacta js referencias de administración de Django para que funcione incluso con otros idiomas. No sé cuál es.

Este fue publicada el django los usuarios hoy en día:

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

Quizás fue que, de todos modos, por si acaso.

+0

gracias ... sí, es chistoso, pero me ha superado ese problema como una solución temporal – interstar

+0

Gracias por el enlace, estaba bien escrito y dejó el proceso claro, y me siento un poco menos hacky. – monkut

2

creo que he resuelto la primera mitad añadiendo explícitamente estas líneas a mi plantilla:

<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> 

Pero todavía no dice conocer getText

+1

no tiene sentido agregar jsi18n si no lo tiene en sus asignaciones de URL. ahí es donde la función gettext será si agrega lo correcto en urls.py: urlpatterns = patterns ('', (r '^ jsi18n/(? P \ S +?)/$', 'django.views. i18n.javascript_catalog '), ) – Vasil

+0

buen punto ... aunque también encontré esa línea en el formulario de administrador. Así que supongo que funciona en este servidor. En cuyo caso ... ¿por qué para ellos sino yo? Tal vez porque es relativo en el árbol de administración allí. – interstar

+0

:) sí, pero es un uri relativo, por lo que si puede averiguar lo que resuelve en las plantillas de administrador, puede ponerlo como una url absoluta y hacer que funcione. Creo que de esta forma funcionará la internacionalización adecuada del datepicker. – Vasil

1

Usted puede encontrar los siguientes trabajos para usted:

<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 }}