Problem mit Templateverwendung unter Django

Django, Flask, Bottle, WSGI, CGI…
Antworten
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Hallo zusammen.

Ich arbeite mit Django auf einem Produktionsserver und versuche eine Seite aufzubauen, was nicht immer ganz funktioniert. Mein größtes Problem ist im Moment die Templates zu nutzen. Ich habe den Pfad unter der settings.py unter TEMPLATE_DIRS angeben aber sie werden nicht angenommen. Ich arbeite gerad nochmal die Django Docu durch und hänge am dritten Teil wo man das erste Template einfügt für die Umfrage. http://docs.djangoproject.com/en/1.2/intro/tutorial03/

Ich arbeite übrigens mit einem Client über Putty auf einem Linux Debian Squeeze mit Apache 2.2.6 mit mod_wsgi

Nun zu meinem Fehler:

Code: Alles auswählen

Environment:

Request Method: GET
Request URL: http://fs-1520vm/polls/
Django Version: 1.2.3
Python Version: 2.6.6
Installed Applications:
['django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'maint.trainies',
 'django.contrib.admin',
 'south',
 'maint.polls']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware')


Traceback:
File "/usr/lib/pymodules/python2.6/django/core/handlers/base.py" in get_response
  91.                         request.path_info)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in resolve
  217.                     sub_match = pattern.resolve(new_path)
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in resolve
  123.             return self.callback, args, kwargs
File "/usr/lib/pymodules/python2.6/django/core/urlresolvers.py" in _get_callback
  132.             raise ViewDoesNotExist("Could not import %s. Error was: %s" % (mod_name, str(e)))

Exception Type: ViewDoesNotExist at /polls/
Exception Value: Could not import polls.views. Error was: No module named polls.views
Ich habe alles so gemacht wie in der Doku, vielleicht ist aber auch auf einem Produktionsserver noch etwas anderes zu beachten keine Ahnung...
Achso und außerdem nutze ich noch das Tool "south" : http://south.aeracode.org/docs/about.html

Vielen Dank schon mal für eure Antworten.

Grüße
Dauerbaustelle
User
Beiträge: 996
Registriert: Mittwoch 9. Januar 2008, 13:48

Das hat nichts mit Templates zu tun. Das Pronblem ist, dass das `polls.views`-Modul nicht gefunden werden kann. Gibt es einen polls/-Ordner? Darin ein views.py und ein __init__.py? Ist "polls" in `settings.INSTALLED_APPS` eingetragen?
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Also ja die app gibts mit all ihren Dateien und ist auch eingetragen in der settings.py. Steht auch oben bei 'maint.polls'. ;)

Ich habe das Programm wieder so weit zurück geschraubt bis es wieder funktioniert, dabei ist mir aufgefallen das in der urls.py es nicht so funktioniert wie im Tutorial.
Im Tutorial steht ja:

Code: Alles auswählen

from django.conf.urls.defaults import *

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^polls/$', 'polls.views.index'),
    (r'^polls/(?P<poll_id>\d+)/$', 'polls.views.detail'),
    (r'^polls/(?P<poll_id>\d+)/results/$', 'polls.views.results'),
    (r'^polls/(?P<poll_id>\d+)/vote/$', 'polls.views.vote'),
    (r'^admin/', include(admin.site.urls)),
)

Das funktioniert bei mir nicht und ergibt den selben Fehler.
Nun habe ich die Funktionen noch mal extra importiert und voila, es funktioniert, aber noch nicht mit den Templates. Meine urls.py sieht jetzt so aus:

Code: Alles auswählen

from django.conf.urls.defaults import *
from polls.views import index, detail, results, vote

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^polls/$', index),
    (r'^polls/(?P<poll_id>\d+)/$', detail),
    (r'^polls/(?P<poll_id>\d+)/results/$', results),
    (r'^polls/(?P<poll_id>\d+)/vote/$', vote),
    (r'^admin/', include(admin.site.urls)),
)
Mit den Templates habe ich jetzt aber auch schon einen Verdacht. Weil ja keine Fehlermeldung kommt, habe ich einfach mal im Errorlog vom Apache gekuckt und da stand zwar kein direkter Fehler, aber er versucht css Dateien zu laden, aber er macht es nicht und gibt eine Standard Http404 Seite aus.
Das heißt doch für mich das der Apache nicht weiß wo er sie findet und ich das nicht richtig eingestellt habe in der settings.py oder?
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Hiho.

Endlich klappt das mit den Templates, warum weiß ich gar nicht so genau, es lief auf einmal aber jetzt wird nichts angzeigt in den Templates, obwohl sogar eine Auflistung stattfindet aber die Werte fehlen. Woran liegt das ?
meine app/views.py

Code: Alles auswählen

from django.shortcuts import render_to_response
from models import Employee
from django.http import HttpResponse

def index(request):
        latest_poll_list = Employee.objects.all()

        return render_to_response(("emp/index.html"), {'latest_poll_list': latest_poll_list})
meine templates/app/index.html

Code: Alles auswählen

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">

<head>
  <meta http-equiv="content-type" content="text/html;charset=iso-8859-1" />
  <title>Design üSS pur - Beispiel</title>

  <style type="text/css">
  <!.

  -->
  </style>

</head>
<body>
<div id="kopfbereich">
<p><h1>Hier entsteht eine Seite</h1></p>
</div>

<div id="steuerung">
Steuerung
</div>

<div id="schatten">
Hier kommt der Schatten spaeter
</div>

<div id="inhalt">
Inhaltsbereich
</div>

{% if latest_poll_list %}
        <ul>
        {% for employee in latest_poll_list %}
                <li><a href="/emp/"></a></li>
        {% endfor  %}
        </ul>
{% else %}
        <p> No employees.</p>
{% endif %}


</body>
</html>
=================================================================

Desweiteren habe ich noch eine Frage zu dem Befehl "TabualarInline" für die Adminseite. Kann ich dir hier auch posten oder sollte ich besser ein neues Thema aufmachen?

Grüße
Fuchs
BlackJack

@AVFuchs: Ähm, wo/wie sollten die Werte denn auf magische Weise in die Aufzählungspunkte kommen!? Ich meine bei folgendem Quelltext würdest Du Dich doch auch nicht fragen, warum da nur Sterne aber keine Werte ausgegeben werden:

Code: Alles auswählen

xs = ['foo', 'bar', 'baz']
for x in xs:
    print '*'
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Ja aber latest_poll_list nimmt doch alle Werte von Employee und diese werden dann doch an die index.html übergeben die sie dann ausgibt oder ?
BlackJack

@AVFuchs: Nein, wo denn? Du hast eine Schleife die über alle Elemente über `latest_poll_list` iteriert und dann *nichts* mit den Elementen macht. Wo genau -- an welcher Stelle -- sollten Deiner Meinung nach die einzelnen Elemente in das Template eingefügt werden? Und warum gerade da?
AVFuchs
User
Beiträge: 18
Registriert: Freitag 1. Oktober 2010, 14:01

Ah ok ich hab den Fehler gefunden. Ich hab vergessen den Wert anzugeben im Template... -.-

Code: Alles auswählen

<li><a href="/emp/">{{ employee.firstname }}</a></li>
Dank dir für den mehr oder weniger direkten Hinweis.^^

PS:
Desweiteren habe ich noch eine Frage zu dem Befehl "TabualarInline" für die Adminseite. Kann ich dir hier auch posten oder sollte ich besser ein neues Thema aufmachen?
Wie kann ich das nun handhaben?
Antworten