Ich versuche, eine Blog-App zu erstellen, die Beiträge hat und jeder Beitrag Titel, Datum, Link und Tags hat.Wie durchläuft ich ein ManyToManyField im django-jinja-Projekt?
Das ist mein models.py
# models.py
from django.db import models
class Tag(models.Model):
name = models.CharField(max_length=20)
def __str__(self):
return self.name
class Meta:
ordering = ('name',)
class Post(models.Model):
title = models.CharField(max_length=300)
date = models.DateTimeField()
link = models.URLField()
tags = models.ManyToManyField(Tag)
def __str__(self):
return self.title
@property
def tags_name(self):
return [x.name for x in self.tags]
class Meta:
ordering = ('date',)
Dieses
mein views.py ist# views.py
from django.conf.urls import url, include
from django.views.generic import ListView
from blog.models import Post
urlpatterns = [
url(r'^$', ListView.as_view(queryset=Post.objects.all().order_by("-date"), template_name="blog/blog_list.html")),
]
Das ist mein blog_list.html
<!-- blog_list.html -->
{% extends "mysite/layout.html" %}
{% block content %}
<h1>my blog posts</h1>
<ul>
{% for post in object_list %}
<li><span class="title"><a href="{{ post.link }}">{{ post.title }}</a></span></li>
<p>{{ post.date|date:"d-m-Y" }}</p>
{% endfor %}
</ul>
{% endblock %}
{% block sidebar %}
<h4 id="sidenav">tags</h4>
{% for post in object_list %}
<ul>
<!-- I want to show the tags here -->
</ul>
{% endfor %}
{% endblock %}
Im blog_list.html, I Ich zeige alle Post-Details und auf der Seitenleiste, ich möchte alle Tags aus allen verfügbaren Blog-Posts zeigen. Da post.tags ManyToManyField ist, wie kann ich es durchlaufen?
Haben Sie versucht, '' '{% für Tag in post.tags.all()%}' ''? Innerhalb dieser for-Schleife sollte es möglich sein, auf Tags als '' '{{tag}}' '' zuzugreifen. –
@ISOmetric Ich meine du meinst '{% für tag in post.tags.all%} {{tag}} {% endfor%}' die '()' sind nicht erlaubt! – hansTheFranz
@hansTheFranz ja, ich glaube du hast Recht, mein Fehler. –