Django-Einsteiger Problem

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
pooner
User
Beiträge: 37
Registriert: Montag 15. Mai 2006, 08:04

Donnerstag 4. September 2008, 10:03

Hallo Leute, ich habe hier ein kleines Problem und hoffe auf Eure Hilfe.

Ich habe gerade begonnen mich mit Django auseinanderzusetzen und als erstes ein Tutorial benutzt welches eine News-Seite erstellt. Folgendes ist passiert. Datenbank definiert und erstellt, Admin Seite auch ok, Einträge vorgenommen. Das Problem ist folgendes: Ich versuche nun eine view zu erstellen die auf ein template zurückgreift. Ich bekomme auch eine Ausgabe, nur die ist leider leer, es werden keine Daten ausgegebne. Gebe ich den code der Funktion in der Shell ein scheint alles zu klappen.

Am besten ich poste euch mal den Code
urls.py

Code: Alles auswählen

from django.conf.urls.defaults import * 
urlpatterns = patterns('',
 (r'^messages/$', 'django02.news.views.messages'),
 (r'^messages/(?P<message_id>\d+)/$', 'django02.news.views.details'),
 (r'^admin/', include('django.contrib.admin.urls')),
) 
views.py

Code: Alles auswählen

# Imports
from django02.news.models import Messages, Comments
from django.http import HttpResponse
from django.template import Context, loader
# fuer die Shortcut-Fkt, anstatt import von http404 und langer version
from django.shortcuts import get_object_or_404

# Fkt. für die Darstellung aller Meldungen als Liste
def messages(request):
	template = loader.get_template("news/meldungen.html")
	context = Context({"meldungen" : Messages.objects.all()})

	return HttpResponse(template.render(context))
 def details(request,message_id):
	# langer Weg
	#	try:
	#	    m = Messages.objects.get(id=message_id)
	#	except Messages.DoesNotExist:
	#		raise Http404

	# kurz
	m = get_object_or_404(Messages, id=message_id)

	lines= [
		"Titel: '%s' vom %s" % (m.title, m.timestamp),
		"Text: %s\n" % m.content,	
		"-" * 30 + "",
		"Kommentare:",
		""]

	lines += ["%s schrieb: %s" % (k.autor, k.text)
		for k in m.comments_set.all()]

	answer = HttpResponse("\n".join(lines))
	answer["Content-Type"] = "text-plain"
	return answer
	
 
models.py

Code: Alles auswählen


from django.db import models

# Create your models here.
class Messages(models.Model):
	title = models.CharField(maxlength=100)
	timestamp = models.DateTimeField()
	text = models.TextField("messagetext")

	# dient der Ausgabe)entweder unicode oder string (str)
	def __str__(self):
		return self.title
		return self.timestamp
		return self.text

class Comments(models.Model):
	news = models.ForeignKey(Messages)
	autor = models.CharField(maxlength=70)
	text = models.TextField("Text")

	# dient der Darstellung(Ausgabe)
	def __unicode__(self):
		return self.text 
und last but not least meine messages.html

Code: Alles auswählen


<h1> alle News</h1>

{% for n in Messages.objects.all %}
<div class="kontainer">
  <div class="titelzeile">
    <div class="title">{{ n.title|escape }}</div>
    <div class="timestamp">{{ n.timestamp }}</div>
    <div style="clear: both"></div>
  </div>
    <div class="text">
	{{ n.meldung|escape|linebreaksbr }}
	<div class="link_unten">
	  <a href="{{ n.id }}/"Details</a>
        </div>
    </div>
</div>
{% endfor %} 
Ich habe keine Ahnung warum die Ausgabe nicht vernünftig angezeigt wird, bitte helft mir

Danke
würmchen
User
Beiträge: 255
Registriert: Mittwoch 7. November 2007, 14:17

Donnerstag 4. September 2008, 10:12

Ich bin auch noch recht neu in django, aber das dict was du zum rendern übergibst hat einen key...

Code: Alles auswählen

context = Context({"meldungen" : Messages.objects.all()}
Solltest du dann nicht in deinem template

Code: Alles auswählen

{% for n in meldungen %}
schreiben???
pooner
User
Beiträge: 37
Registriert: Montag 15. Mai 2006, 08:04

Donnerstag 4. September 2008, 10:56

natürlich, das war es. Danke. :D
Ich war so verblendet von der Beispielvorlage da ist mir das nicht aufgefallen.
Antworten