Seite 1 von 1

[Django] Fehlende Icons im Admin-Oberfläche

Verfasst: Sonntag 30. August 2009, 14:52
von Mawilo
Hallo,

wenn ich auf meiner Webseite über das Admin-Oberfläche einen Beitrag speicher, bekomme ich folgende Fehlermeldung per Mail:

Code: Alles auswählen

Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/django/core/handlers/base.py", line 86, in get_response
    response = callback(request, *callback_args, **callback_kwargs)
  File "/usr/lib/python2.5/site-packages/django/contrib/admin/options.py", line 208, in wrapper
    return self.admin_site.admin_view(view)(*args, **kwargs)
  File "/usr/lib/python2.5/site-packages/django/contrib/admin/sites.py", line 148, in inner
    return view(request, *args, **kwargs)
  File "/usr/lib/python2.5/site-packages/django/db/transaction.py", line 238, in _commit_on_success
    res = func(*args, **kw)
  File "/usr/lib/python2.5/site-packages/django/contrib/admin/options.py", line 585, in change_view
    obj = model._default_manager.get(pk=unquote(object_id))
  File "/usr/lib/python2.5/site-packages/django/db/models/manager.py", line 93, in get
    return self.get_query_set().get(*args, **kwargs)
  File "/usr/lib/python2.5/site-packages/django/db/models/query.py", line 336, in get
    clone = self.filter(*args, **kwargs)
  File "/usr/lib/python2.5/site-packages/django/db/models/query.py", line 522, in filter
    return self._filter_or_exclude(False, *args, **kwargs)
  File "/usr/lib/python2.5/site-packages/django/db/models/query.py", line 540, in _filter_or_exclude
    clone.query.add_q(Q(*args, **kwargs))
  File "/usr/lib/python2.5/site-packages/django/db/models/sql/query.py", line 1491, in add_q
    can_reuse=used_aliases)
  File "/usr/lib/python2.5/site-packages/django/db/models/sql/query.py", line 1434, in add_filter
    connector)
  File "/usr/lib/python2.5/site-packages/django/db/models/sql/where.py", line 52, in add
    obj, params = obj.process(lookup_type, value)
  File "/usr/lib/python2.5/site-packages/django/db/models/sql/where.py", line 265, in process
    params = self.field.get_db_prep_lookup(lookup_type, value)
  File "/usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py", line 210, in get_db_prep_lookup
    return [self.get_db_prep_value(value)]
  File "/usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py", line 361, in get_db_prep_value
    return int(value)

ValueError: invalid literal for int() with base 10: 'add/img/admin/icon_clock.gif'
Die Meldung kommt auch noch einmal mit dem icon_calendar.gif. Es werden keine Icons angezeigt. Ansonsten funktioniert alles normal.

Im Verzeichnis usr/lib/python2.5/site-packages/django/contrib/admin/media/img/admin/ gibt es die entsprechenden Bilder.

In der settings.py habe ich ADMIN_MEDIA_PREFIX = '/admin_media/' angegeben und im Projektordner einen Link von admin_media zu usr/lib/python2.5/site-packages/django/contrib/admin/media/ gelegt.

Was habe ich da übersehen?


Grüße
Mawilo

Re: [Django] Fehlende Icons im Admin-Oberfläche

Verfasst: Montag 31. August 2009, 07:05
von jens
Mawilo hat geschrieben:

Code: Alles auswählen

  File "/usr/lib/python2.5/site-packages/django/db/models/fields/__init__.py", line 361, in get_db_prep_value
    return int(value)

ValueError: invalid literal for int() with base 10: 'add/img/admin/icon_clock.gif'
Denke es hat überhaupt nichts mit statischen Dateien zu tun. In einem Model Feld für eine Zahl, wird versucht der String 'add/img/admin/icon_clock.gif' zu speichern.

Hier wäre die betreffende URL hilfreich.

Verfasst: Montag 31. August 2009, 18:34
von Mawilo
Das Model hat ein DateTimeField(). Dort sollten ja das Icon für die Uhr und den Kalender angezeigt werden.

Code: Alles auswählen

class Beitrag(models.Model):
    titel = models.CharField('Titel', max_length=150, blank=True)
    inhalt = models.TextField('Beitrag')
    datum = models.DateTimeField()
    bereich = models.CharField('Kategorie', max_length=50, choices=bereiche)
    thema = models.CharField('Thema', max_length=50, choices=themen)
    sortierung = models.PositiveIntegerField('Sortierung', blank=True)

    class Meta():
        verbose_name = 'Beitrag'
        verbose_name_plural = 'Beiträge'
        ordering = ['sortierung']

    def __unicode__(self):
        return 'Titel: %s  (Bereich: %s Thema: %s)'%(self.titel, self.bereich, self.thema)

class BeitragOptions(admin.ModelAdmin):
    class Media:
        js = ('js/tiny_mce/tiny_mce.js',
              'js/tiny_mce/textareas.js',)


admin.site.register(Beitrag, BeitragOptions)
Mir ist nicht ganz klar, welche URL hilfreich wäre, da es doch die Standard-Admin-Oberfläche ist.

Grüße
Mawilo

Verfasst: Montag 31. August 2009, 18:50
von nemomuk
http://www.mail-archive.com/django-user ... 60083.html

Vllt. hilft dir dieser Link weiter, du musst MEDIA_ROOT setzen.

Verfasst: Montag 31. August 2009, 19:13
von Mawilo
MEDIA_URL und MEDIA_ROOT habe ich gesetzt.

Code: Alles auswählen

MEDIA_ROOT = '/pages/mysite/media/'
MEDIA_URL = 'http://www.mysite.de/media/'
ADMIN_MEDIA_PREFIX = '/admin_media/'
Wie gesagt - alles andere sieht normal aus. Nur die Icon fehlen. Wenn ich Debug=True setze, erhalte ich auch keine Fehler angezeigt.

Verfasst: Montag 31. August 2009, 19:32
von nemomuk
Hast du das hier zu deinen urlpatterns hinzugefügt?
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'dein_admin_media_ordner'}),

Verfasst: Montag 31. August 2009, 19:55
von Mawilo
Ja, das habe ich zugefügt - hat aber keine Auswirkungen. Der Fehler muss mit der Klasse

Code: Alles auswählen

BeitragOptions(admin.Model)
zusammen hängen. Wenn ich nur

Code: Alles auswählen

admin.site.register(Beitrag)
verwende, habe ich zwar keinen Editor mehr - dafür die zwei Icons :?

Verfasst: Mittwoch 2. September 2009, 21:35
von apollo13
SchneiderWeisse hat geschrieben:Hast du das hier zu deinen urlpatterns hinzugefügt?
(r'^static/(?P<path>.*)$', 'django.views.static.serve', {'document_root': 'dein_admin_media_ordner'}),
Das ist blödsinn und macht Django im devel mode automatisch.

Verfasst: Mittwoch 2. September 2009, 21:38
von apollo13
Mawilo hat geschrieben:Ja, das habe ich zugefügt - hat aber keine Auswirkungen. Der Fehler muss mit der Klasse

Code: Alles auswählen

BeitragOptions(admin.Model)
zusammen hängen. Wenn ich nur

Code: Alles auswählen

admin.site.register(Beitrag)
verwende, habe ich zwar keinen Editor mehr - dafür die zwei Icons :?
Schau doch mal nach, welche scripts eingebunden werden und ob Fehler in der Error Console (des Browsers) stehen

Verfasst: Donnerstag 3. September 2009, 18:49
von Mawilo
Wenn ich nur

Code: Alles auswählen

admin.site.register(Beitrag)
verwende, so erhalte ich in Firebug folgenden Code für das Kalendericon:

Code: Alles auswählen

<a id="calendarlink0" href="javascript:DateTimeShortcuts.openCalendar(0);">
<img src="http://www.mysite.de/admin_media/img/admin/icon_calendar.gif" alt="Kalender"/>
</a>
Die Icons werden angezeigt.
Verwende ich aber

Code: Alles auswählen

class BeitragOptions(admin.ModelAdmin):
    class Media:
        js = ('js/tiny_mce/tiny_mce.js',
              'js/tiny_mce/textareas.js',)
mit

Code: Alles auswählen

admin.site.register(Beitrag, BeitragOptions)
so erhalte ich diese Ausgabe:

Code: Alles auswählen

<a id="calendarlink0" href="javascript:DateTimeShortcuts.openCalendar(0);">
<img src="img/admin/icon_calendar.gif" alt="Kalender"/>
</a>
Mit der Klasse BeitragOptions(admin.ModelAdmin) binde ich den TinyMCEditor ein. Damit scheint aber Django durcheinander zu kommen, und kennt den richtigen Pfad zu den Icons nicht mehr. :?

In der Doku kann ich auch nichts anderes finden.

Hat noch jemand einen Tipp für mich?

Verfasst: Donnerstag 3. September 2009, 19:31
von Mawilo
Tja, das scheint ein Problem mit Django und Firefox 3.5 zu sein. Wenn ich die Admin-Oberfläche mit Opera 9, Opera 10, Konqueror, IE6 oder IE7 öffne, ist alles ok. :shock:
Nur mit Firefox 3.5 fehlen die Icons und ich erhalte eine Fehlermeldung per Mail.

Verfasst: Donnerstag 3. September 2009, 20:29
von sma
Das klingt komisch. Was sagt denn das Access-Log? D.h. welche Requests schickt denn der Firefox 3.5, die alle anderen Browser nicht schicken?

Stefan

Verfasst: Samstag 5. September 2009, 11:05
von apollo13
ich tipp auf nen kaputten admin media path, oder zumindest was in die Richtung; Schau mal nach ob du die Media files mit ADMIN_MEDIA_PREFIX prefixen musst. Wennns nicht geht pack das Projekt und lad es wo hoch (so, dass man es nur entpacken braucht und es rennt), dann schau ich mir das genau an. Ich hab hier keine Probleme mit ff 3.5

Verfasst: Sonntag 6. September 2009, 08:21
von Mawilo
sma hat geschrieben:Was sagt denn das Access-Log? D.h. welche Requests schickt denn der Firefox 3.5, die alle anderen Browser nicht schicken?
Hier die Access-Log-Einträge vom Firefox:

Code: Alles auswählen

[06/Sep/2009:08:47:35 +0200] "GET /admin HTTP/1.1" 301 -
[06/Sep/2009:08:47:35 +0200] "GET /admin/ HTTP/1.1" 200 6180
[06/Sep/2009:08:47:39 +0200] "GET /admin/beitrag/beitrag/add/ HTTP/1.1" 200 5504
[06/Sep/2009:08:47:39 +0200] "GET /admin/jsi18n/ HTTP/1.1" 200 1915
[06/Sep/2009:08:47:40 +0200] "GET /media/js/tiny_mce/plugins/zoom/editor_plugin.js HTTP/1.1" 404 1315
[06/Sep/2009:08:47:40 +0200] "GET /media/js/tiny_mce/plugins/flash/editor_plugin.js HTTP/1.1" 404 1315
[06/Sep/2009:08:47:40 +0200] "GET /media/js/tiny_mce/plugins/zoom/editor_plugin.js HTTP/1.1" 404 1315
[06/Sep/2009:08:47:41 +0200] "GET /admin/beitrag/beitrag/add/img/admin/icon_calendar.gif HTTP/1.1" 301 -
[06/Sep/2009:08:47:41 +0200] "GET /admin/beitrag/beitrag/add/img/admin/icon_clock.gif HTTP/1.1" 301 -
[06/Sep/2009:08:47:41 +0200] "GET /admin/beitrag/beitrag/add/img/admin/icon_calendar.gif/ HTTP/1.1" 500 1020
[06/Sep/2009:08:47:41 +0200] "GET /admin/beitrag/beitrag/add/img/admin/icon_clock.gif/ HTTP/1.1" 500 1020
und vom Konqueror:

Code: Alles auswählen

[06/Sep/2009:08:51:22 +0200] "GET /admin/ HTTP/1.1" 200 6180
[06/Sep/2009:08:51:24 +0200] "GET /admin/beitrag/beitrag/add/ HTTP/1.1" 200 5504
[06/Sep/2009:08:51:25 +0200] "GET /admin/jsi18n/ HTTP/1.1" 200 1915
[06/Sep/2009:08:51:25 +0200] "GET /media/js/tiny_mce/plugins/zoom/editor_plugin.js HTTP/1.1" 404 1201
[06/Sep/2009:08:51:25 +0200] "GET /media/js/tiny_mce/plugins/flash/editor_plugin.js HTTP/1.1" 404 1201
apollo13 hat geschrieben:Schau mal nach ob du die Media files mit ADMIN_MEDIA_PREFIX prefixen musst
Ich habe in der settings.py den Pfad gesetzt:

Code: Alles auswählen

ADMIN_MEDIA_PREFIX = '/admin_media/'
Wenn ich den Eintrag offen lasse

Code: Alles auswählen

ADMIN_MEDIA_PREFIX = ''
dann habe ich natürlich die Oberfläche mit Editor aber ohne die Icons für Kalender und Uhr. Mit der Einstellung

Code: Alles auswählen

ADMIN_MEDIA_PREFIX = '/media/'
bekomme ich die Admin Oberfläche im Stil der Webseite, da die css der Webseite verwendet werden. Es werden auch keine Icons angezeigt.

Ggf. kann man den Fehler nachstellen, wenn man den TinyMCE einbindet. Für mich sieht es so aus, als gibt es ein Problem mit der Verarbeitung von Javascript.
Ich habe auch eine Diskussion über das Problem gefunden.


PS:
Ist als Ticket aufgenommen.