Wie kann ich die Anzahl von Kommentare anzeigen beim News?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Tommy2002
User
Beiträge: 13
Registriert: Mittwoch 24. Dezember 2008, 10:20
Kontaktdaten:

Mittwoch 24. Dezember 2008, 10:36

Hallo,

ich hoffe ich poste das hier richtig.

Ich bin neu in der Materie Python und Django. Ich möchte zum Anfang ein kleines News System mit Kommentaren Programmieren. Das Funktioniert auch schon recht gut. Ich möchte ich wenn die News angezeigt werden auch sehen wie viele Kommentare für diesen Beitrag vorhanden sind. Zurzeit habe ich es wie folgt gemacht:

models.py

Code: Alles auswählen

from django.db import models

class Kategorie(models.Model):
    name = models.TextField("Kategoriename")
    bild = models.CharField(max_length=4)

class Meldung(models.Model):
    titel = models.TextField("Titeltext")
    kategorie = models.ForeignKey(Kategorie)
    zeitstempel = models.DateTimeField()
    autor = models.IntegerField()
    text = models.TextField("Meldungstext")

class Kommentar(models.Model):
    news_id = models.ForeignKey(Meldung)
    autor = models.CharField(max_length=70)
    zeitstempel = models.DateTimeField()
    text = models.TextField("Kommentartext")
views.py

Code: Alles auswählen

from tp_control.news.models import Meldung, Kommentar, Kategorie
from django.http import HttpResponse, Http404
from django.template import Context, loader

def meldung(request):
    template = loader.get_template("news/meldungen.html")
    context = Context({"meldungen" : Meldung.objects.all()})
    
    return HttpResponse(template.render(context))
meldungen.html

Code: Alles auswählen

{% extends "header.html" %}
{% block inhalt %}
<tr class="tabelle_haupt_spalte">
  	<td>
	  <br/>
            {% for n in meldungen %} 
	    <table align="center" class="tabelle_normal" cellspacing="1">
		  <tr class="box_text_top">
		    <td>News: {{ n.titel|escape }}</td>
		  </tr>
		  <tr class="box_text_normal">
		    <td>{{ n.text|escape|linebreaksbr }}</td>
		  </tr>
		  <tr class="box_text_top">
		    <td>Erstellt von: {{ n.autor }} am {{ n.zeitstempel }} Kommentare: </td>
		  </tr>
		</table>
        {% endfor %}
	  </form>
	  <br/>
	</td>
</tr>
{% endblock %}

Nun möchte ich gerne beim Anzeigen der News die vorhanden Kommentare anzeigen. Kann mir vielleicht jemand weiterhelfen wie ich dies realisieren kann? Da ich zur Zeit in der HTML Datei nur die Meldungen zur Verfügung habe.

Danke vorab.

Gruß

Tommy2002
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 24. Dezember 2008, 12:06

Hasst du dir schon ``django.contrib.comments`` angesehen? Das ist genau für Kommentare gedacht.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Mittwoch 24. Dezember 2008, 12:06

Ich weiß nicht, was Django macht, wenn an einem Attribut schon "_id" hängt, denn das fügt das Rahmenwerk intern nochmals hinzu. Lass es lieber weg und nenne "news_id" lieber "meldung". Wieso hast du auch gerade da einen englischen Namen benutzt?

Füge außerdem einen `related_name` hinzu, damit du nicht mit `kommentar_set` arbeiten musst: Also z.B. related_name="kommentare".

Die Anzahl der Kommentare kannst du mit {{ n.kommentare.count }} ausgeben. Vorher änderst du aber das "n" in ein "m", damit es besser zu Meldungen passt. Ich finde die deutschen Namen zwar gewöhnungsbedürftig, aber wenn schon, dann sei bitte auch konsequent.

In deinem View kannst du render_to_response() (importieren aus django.shortcuts) benutzen, das macht den Umgang mit Templates einfacher.

Außerdem scheinst du eine sehr alte Version von Django zu benutzen, denn explizites Escapen von Texten ist in Django 1.0 nicht mehr nötig. Ich schlage vor, auf 1.0.x zu aktualisieren.

Frohe Weihnachten
Tommy2002
User
Beiträge: 13
Registriert: Mittwoch 24. Dezember 2008, 10:20
Kontaktdaten:

Mittwoch 14. Januar 2009, 20:47

Danke @ sma hat prima funktioniert.

Gruß

Tommy2002
Antworten