Ich versuche eine Forum-Anwendung zu entwickeln.Wie vermeidet man Logik in der Vorlage?
Ich versuche, das neueste Thema anzuzeigen, das in jeder Kategorie auf einer Eintragsseite gepostet wurde. Allerdings habe ich nach dem Hinzufügen von mehr als einer Kategorie festgestellt, dass ich eine separate Abfrage für jede einzelne Kategorie benötige oder es zeigt nur das neueste Thema insgesamt.
Ich bin nur nicht sicher, wie meine Logik in der Ansicht für die Abfragen zu halten. Natürlich könnte ich die Abfrage innerhalb meiner for-Schleife durchführen, aber das scheint nicht sehr MVT-orientiert zu sein.
Hier ist mein views.py:
from django.shortcuts import render
from .models import ForumReply, ForumCategory, ForumTopic
def index(req):
categories = ForumCategory.objects.all()
#find latest topic or topic by reply
topic = ForumTopic.objects.latest('created_at')
reply = ForumReply.objects.latest('created_at')
if (topic.created_at > reply.created_at):
latest = topic
else:
latest = reply.topic
return render(req, "forum/category_listing.html",
{'categories': categories, 'latest': latest})
Und mein category_listing.html:
{% extends '__base.html' %}
{% block content %}
{% for category in categories %}
<div class="forum_category">
<h1><a href="{% url 'forum_topic_list' category.pk 1 %}">{{ category.title }}</a></h1>
{{ category.body }}
<br />
<em>Latest Post: </em> {{ latest.title }} by {{ latest.user }} at {{ latest.created_at|date:"D d F Y h:i" }}
</div>
<br />
{% endfor %}
{% endblock %}
Statt sich Gedanken, wie dies zu tun, aus Vorlagen sollten Sie einen Weg finden, lesen in die ganze Sache zu tun ** eine ** Datenbankabfrage. – Sevanteri
Ich bin sehr neu in Django, also würde ein wenig Hilfe geschätzt werden. Habe kaum die Spitze seines ORMs gestreift –
Persönlich kann ich nicht helfen, da ich Django seit Jahren nicht mehr benutzt habe. Aber die [Django docs] (https://docs.djangoproject.com/ja/1.9/topics/db/queries/#related-objects) haben natürlich eine Menge Informationen über das Thema und ein bisschen Googeln wird es geben Sie eine Menge Tutorials und Anleitungen. – Sevanteri