访问Django模板

时间:2017-11-13 18:40:42

标签: python django

我有以下博客项目:

  

models.py:

from django.db import models
from django.utils import timezone

class Post(models.Model):
    title = models.CharField(max_length=200)
    body = models.TextField()
    pub_date = models.DateTimeField(default=timezone.now)
    categories = models.ManyToManyField('Category')

    def __str__(self):
        return self.title

class Category(models.Model):
    title = models.CharField(max_length=200)

    def __str__(self):
        return self.title

    # Change the name in Admin from categorys to categories
    class Meta:
        verbose_name_plural = "categories"
  

views.py:

from django.shortcuts import render
from .models import Post, Category, Comment

def getPosts(request):

    posting = Post.objects.all().order_by('-pub_date')
    categories = Category.objects.all()

    context = {
        'posting':posting,
        'categories':categories,
              }
    return render(request, 'posts/getPosts.html', context)
  

getPosts.html模板:

    {% if posting %}
        {% for article in posting %}
            <h3>{{article.title}}</h3>
            <ul>{{article.body}}</ul>
            <ul>Posted : {{article.pub_date}}</ul>

            <ul>
                <em>Found in category : </em>

                {{ article.categories }} 
                {{ article.categories.all }}
                {% for category in categories %}
                    {{category.title}} 
                {% endfor %} 
            </ul>
        {% endfor %}
    {% endif %}

我有三个帖子,都显示正确,但

{{article.categories}}正在给我:

posts.Category.None

{{article.categories.all}}给了我

QuerySet [<Category: Diving>]

第二个循环输出所有类别的列表,我希望它只是一个测试运行:

Kit & Packing Diving Places Tips Private

我想简单地浏览每个帖子的类别名称,该名称已在管理面板中选中并通过管理面板保存。

我已经尝试过了一千种不同的建议,例如将视图更改为category = post.category_set.all(),并且已经研究了几天,但是我没有在哪里。

1 个答案:

答案 0 :(得分:0)

你已经有了正确的答案; article.categories.all,你应该循环。

{% for category in article.categories.all %}
    {{category.title}} 
{% endfor %} 

您根本不需要视图中的categories值。