2009-03-19 21 views
12

Ich versuche, den Admin-Datepicker in meinen eigenen Django-Formen zu verwenden.django: mit admin datepicker

hier im Anschluss an die Diskussion Grob: http://www.mail-archive.com/[email protected]/msg72138.html

Ich habe

a) In meiner forms.py die Linie

enthalten
from django.contrib.admin import widgets 

b) und verwendet, um das Widget wie folgt aus:

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

c) Und in meiner aktuellen Vorlage habe ich hinzugefügt:

{{form.media}} 

So schließen Sie die js/Stile usw.

Allerdings, wenn ich versuche, meine Form ich kein schönes Widget bekommen zu sehen; nur ein gewöhnliches Textfeld. Und die Firefox JavaScript-Fehler-Konsole zeigt mir:

gettext nicht in calendar.js definiert (Zeile 26)

und

addEvent nicht in DateTimeShortcuts.js definiert (Linie 254)

Irgendwelche Vorschläge? Ist das ein Fehler in Djangos eigener Javascript-Bibliothek?

Update: Grundsätzlich müssen den Kern und (oder gefälschten) um die i18lization

Update 2: Carl weist darauf hin, das ist so ziemlich ein Duplikat Using Django time/date widgets in custom form (obwohl aus einer anderen Startposition)

+0

Diese Frage ist ein Duplikat. Siehe die Antwort hier: http://stackoverflow.com/questions/38601/using-django-time-date-widgets-in-custom-form/38916#38916 –

+0

danke ... lustig, das nicht in Pop-up Irgendwelche von "In Verbindung stehenden Fragen" Entweder in der Seitenleiste hier oder als ich die Frage schrieb – interstar

+0

Die Antwort auf die Frage Carl Meyer verweist darauf, dass dies eine Antwort ist, die viel Arbeit erfordert, mehr als nur Ihre eigene zu implementieren datepicker mit jQuery oder einer anderen bekannten Bibliothek. – rossdavidh

Antwort

5

Nein, es ist kein Fehler.

Es wird versucht, die gettext() - Internationalisierungsfunktion in js aufzurufen. Sie können js Internationalisierung tun, wie Sie es in Python-Code oder Vorlagen tun, es ist nur eine weniger bekannte Funktion.

Wenn Sie js Internationalisierung in Ihrem Projekt nicht verwenden, können Sie einfach setzen.

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

in Ihrer Top-Vorlage, so dass der js-Interpreter nicht erstickt.

Dies ist ein hacky Weg, es zu lösen, ich weiß.

Edit:

oder Sie können die genauen jsi18n js django Admin-Referenzen enthalten, um es auch mit anderen Sprachen arbeiten zu bekommen. Ich weiß nicht, welcher es ist.

Dies wurde auf django-Benutzer heute veröffentlicht:

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

Sie war es vielleicht, wie auch immer, nur für den Fall.

+0

danke ... ja, es ist hacky, aber es hat mich hinter diesem Problem als temporäre Lösung – interstar

+0

Dank für den Link, es war gut geschrieben und machte den Prozess klar, und fühle mich ein wenig weniger hacky. – monkut

2

Ich denke, dass ich die erste Hälfte gelöst, indem explizit diese Zeilen zu meiner Vorlage hinzu:

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

Aber es Berichte zu wissen immer noch nicht gettext

+1

Es macht keinen Sinn, jsi18n hinzuzufügen, wenn Sie es nicht in Ihren URL-Mappings haben. Das ist die Gettext-Funktion, wenn Sie das Richtige in urls.py hinzufügen: urlpatterns = patterns ('', (? ') i18n.javascript_catalog '), ) – Vasil

+0

guter Punkt .. obwohl ich diese Linie in der Admin-Form zu finden. Ich nehme an, dass es auf diesem Server funktioniert. In welchem ​​Fall ... warum für sie, wenn nicht für mich. Vielleicht, weil es dort in der Admin-Struktur relativ ist. – interstar

+0

:) Ja, aber es ist eine relative URI, wenn Sie also herausfinden können, was es in den Admin-Vorlagen löst, können Sie es als absolute URL setzen und es funktionieren lassen. Ich denke auf diese Weise wird die richtige Internationalisierung der Veranstaltung funktionieren. – Vasil

1

Sie können folgende Arbeiten für Sie:

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