Django templates

Django, Flask, Bottle, WSGI, CGI…
Antworten
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo zusammen,

ich will einen Webserver mit Django und Ajax aufsetzen.
mein Django-Server funktioniert auch schon.
nun wollte ich folgendes Ajax Beispiel ausprobieren:
http://www.ajaxbuch.de/code/frameworks/ ... eCookie.py

ich habe den Programmcode in den Ordner templates hineinkopiert unter test.html
auch die JavaScripte hab ich entsprechend angelegt

kann mir jemand sagen was ich falsch mache? muss ich den Python Quellcode seperat auslagern?

vielen Dank im voraus
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo erdmulch,

das Beispiel basiert ja auf einer cgi-Schnittstelle und nicht auf django.
Das wird so nicht zusammen funktionieren.

Ich habe auf Browser-Seite gute Erfahrung mit jquery und ajax gemacht.
Zum Beispiel in /template/index.html

Code: Alles auswählen

<html>
<head>
  <script src="/static/jquery.js"></script>
</head>
<body>
<b>Frage: </b>  Was ist 2*3?</br>
<a href='#' onclick='$("#answer").load("/ajax.html");'>Antwort</a>
<div id='answer'></div>
</body>
</html>
Und wenn Du in django eine Funktion auf /index.html und /ajax.html mappst:

Code: Alles auswählen

def get_index(request):
    return TemplateResponse(request, 'index.html', {});

def get_answer(request):
    return HttpResponse('Die Antwort ist: <b>6</b>')
Fertig ist das ajax-Beispiel.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Hallo nochmals,

kann mir jemand sagen, woher ich den JavaScript Code bekomme:
<script src="/static/jquery.js"></script>

vielen Dank
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Du meinst jquery?
Hast du das schon einmal in die Suchmaschine deiner Wahl eingegeben?
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Leider kommt folgende Fehlermeldung:
No module named response
obwohl ich das Modul mit folgendem Befehl import habe:
from django.template.response import TemplateResponse

was mach ich falsch? gibt es einen neuen Import Befehl?
vielen Dank im voraus
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo erdmulch,

In django Version 1.4 ist es genau dieser import Befehl.
Welche Version verwendest Du?
erdmulch hat geschrieben:mein Django-Server funktioniert auch schon.
Was funktioniert dann bei Deinem Server?

Grüße
Sirius
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

Ich benutze Django 1.1.1 auf einer Linux Destribution
kann man das irgendwie updaten? ohne großen aufwand?
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

hallo nochmals,

habe Django nun upgedatet auf Version 1.4.2
auf version 1.1.1 hatte ich folgendes Script ohne Probleme laufen:

Code: Alles auswählen

#!/usr/bin/env python
#-*- coding: utf-8 -*-
from articles.models import Article, Talkback
from datetime import datetime
import os
import serial
import time

def save():
    time.sleep(15)
    ser = serial.Serial('/dev/rfcomm0')
    time.sleep(15)
    try:
        while True:
            line = ser.readline()
            print line
            a = Article(title=line, slug='', pub_date=datetime.now(), author='', content='')
            a.save()
    finally:
        ser.close()
save()

diese Funktion schreibt Daten, die von der Seriellen Schnittstelle kommen in eine Datenbank.
mit der Djangoversion 1.1.1 hat dies sehr gut funktioniert.
leider musste ich meine Djangoversion updatet, da ich ansonsten kein httpTemplateResponse ausführen konnte

kann mir jemand sagen was ich anpassen muss dass es bei der Djangoversion1.4.2 wieder funktioniert?
es erscheint folgende Fehlermeldung:
Peter:~/tmp/djangoprojs/pypost$ ./Schnittstelle.py
/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/conf/__init__.py:75: DeprecationWarning: The ADMIN_MEDIA_PREFIX setting has been removed; use STATIC_URL instead.
"use STATIC_URL instead.", DeprecationWarning)
Temperatur 23.0

Traceback (most recent call last):
File "./Schnittstelle.py", line 30, in <module>
save()
File "./Schnittstelle.py", line 26, in save
a.save()
File "/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/db/models/base.py", line 463, in save
self.save_base(using=using, force_insert=force_insert, force_update=force_update)
File "/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/db/models/base.py", line 551, in save_base
result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
File "/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/db/models/manager.py", line 203, in _insert
return insert_query(self.model, objs, fields, **kwargs)
File "/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/db/models/query.py", line 1593, in insert_query
return query.get_compiler(using=using).execute_sql(return_id)
File "/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/db/models/sql/compiler.py", line 908, in execute_sql
cursor = self.connection.cursor()
File "/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/db/backends/dummy/base.py", line 15, in complain
raise ImproperlyConfigured("settings.DATABASES is improperly configured. "
django.core.exceptions.ImproperlyConfigured: settings.DATABASES is improperly configured. Please supply the ENGINE value. Check settings documentation for more details.
Zuletzt geändert von Anonymous am Samstag 24. November 2012, 18:02, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Hallo Peter,

in den settings.py hat sich zwischen den Versionen einiges geändert.
Erzeug am Besten ein neues Django-Projekt und pass entsprechend
die Einstellungen an Dein Projekt an.

Grüße
Sirius
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

hallo nochmals,

jetzt hat alles soweit geklappt. Leider findet er die templates nicht mehr.
Folgende Fehlermeldung erscheint:

TemplateDoesNotExist at /articles/

articles.html

Request Method: GET
Request URL: http://192.168.0.110:9090/articles/
Django Version: 1.4.2
Exception Type: TemplateDoesNotExist
Exception Value:

articles.html

Exception Location: /usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg/django/template/loader.py in find_template, line 138
Python Executable: /usr/bin/python
Python Version: 2.6.5
Python Path:

['/home/Peter/tmp/djangoprojs/Wetterstation',
'/usr/local/lib/python2.6/dist-packages/pymodbus-0.5.1-py2.6.egg',
'/usr/local/lib/python2.6/dist-packages/pyserial-2.6-py2.6.egg',
'/usr/local/lib/python2.6/dist-packages/nose-1.1.2-py2.6.egg',
'/usr/local/lib/python2.6/dist-packages/Django-1.4.2-py2.6.egg',
'/usr/lib/python2.6',
'/usr/lib/python2.6/plat-linux2',
'/usr/lib/python2.6/lib-tk',
'/usr/lib/python2.6/lib-old',
'/usr/lib/python2.6/lib-dynload',
'/usr/lib/python2.6/dist-packages',
'/usr/lib/python2.6/dist-packages/PIL',
'/usr/lib/python2.6/dist-packages/gst-0.10',
'/usr/lib/pymodules/python2.6',
'/usr/lib/python2.6/dist-packages/gtk-2.0',
'/usr/lib/pymodules/python2.6/gtk-2.0',
'/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode',
'/usr/local/lib/python2.6/dist-packages']

Server time: Sat, 24 Nov 2012 21:54:13 +0100


in welchen Ordner muss ich meine html Seite kopieren, dass es mein Server findet?
im Prinzip hab ich jetzt in jedem Ordner die "articles.html" seite kopiert, aber er findet sie dennoch nicht
den Python Pfad habe ich auf:"'/home/Peter/tmp/djangoprojs/Wetterstation'" gesetzt

kann mir jemand helfen
Benutzeravatar
sparrow
User
Beiträge: 4187
Registriert: Freitag 17. April 2009, 10:28

Du musst die zu durchsuchenden Verzeichnisse in der settings.py deines Projektes angeben.
erdmulch
User
Beiträge: 230
Registriert: Samstag 17. Juli 2010, 19:50

erstmals vielen Dank.
jetzt habe ich auch schon das nächste Problem
und zwar habe ich meine view wie oben gezeigt programmiert
wenn ich jetzt auf "antwort" klicke erscheint in meinem Browser Eingabefeld folgendes:
http://192.168.0.110:9090/articles/#
sprich das zeichen: "'#" ist hinzugekommen.
Allerdings erscheint keine antwort
muss ich den Pfad in der urls.py eintragen? wenn ja wie oder mach ich sonst noch was falsch?
dies war mal mein Ansatz:
(r'^articles/#$', 'Wetterstation.articles.views.get_answer'),

vielen Dank im voraus nochmals
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Der # heißt in html Anker und ist dazu da an eine bestimmte Stelle auf der Seite zu springen.

Code: Alles auswählen

<html>
  <body>
    <a name="oben">hier ist oben</a>
    ...
    viel Text
    ...
    <a href="#oben">nach oben...</a>
    </body>
</html>
Das ganze läuft nur intern im Browser ab, Dein Server bekommt davon nichts mit.
Bei Links die nur javascript aufrufen sollen, wird oft ein '#' ohne Namen als Referenz
angegeben, damit der Browser nichts tut, falls das Javascript nicht läuft.

Wenn keine Antwort kommt, dann gibt es einen Fehler im Javascript. Du kannst in
der Fehlerkonsole/Entwicklertools Deines Browsers die Fehlermeldung nachschauen.

Grüße
Sirius
BlackJack

@erdmulch: Das '#' erscheint da weil man dem ``href``-Attribut irgend etwas zuweisen musste. Du musst die URL auf die Funtkion mappen die Du per JavaScript anforderst. Ich könnte jetzt raten welche das ist, aber es wäre vielleicht generell einfacher wenn Du das selbst heraus findest. Das sollte doch zum Beispiel im Log des Webservers stehen.

Da JavaScript im Browser ohne weitere Hilfsmittel immer recht „still und leise” auf die Nase fällt wenn etwas nicht funktioniert wie es soll, müsstest Du Dich für Deinen bevorzugten Browser am besten mal nach Unterstützung für Entwickler umsehen. Bei Firefox ist zum Beispiel das Firebug-Plugin recht umfangreich, und Chrome bringt unter `→ Tools → Developer Tools` so einiges schon mit.
Antworten