Seite 1 von 1

Wie kann ich die Anzahl von Kommentare anzeigen beim News?

Verfasst: Mittwoch 24. Dezember 2008, 10:36
von Tommy2002
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

Verfasst: Mittwoch 24. Dezember 2008, 12:06
von Leonidas
Hasst du dir schon ``django.contrib.comments`` angesehen? Das ist genau für Kommentare gedacht.

Verfasst: Mittwoch 24. Dezember 2008, 12:06
von sma
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

Verfasst: Mittwoch 14. Januar 2009, 20:47
von Tommy2002
Danke @ sma hat prima funktioniert.

Gruß

Tommy2002