如何通过Django中的views.py将多个值从models.py传递到HTML

2024-04-23 18:41:17 发布

您现在位置:Python中文网/ 问答频道 /正文

对于我的Django博客,我有一个followmodels.py,我创建了一个followviews.py来传递URL参数的slug值。
然而,我正在努力在视图中创建一个模型,以便从Category类中获取其他数据(person和description)。
我自己尝试了一些模式,但无法将它们传递到HTML。(始终显示错误或不显示)
你能告诉我如何解决这个问题吗。

型号.py

class Category(models.Model):
    person = models.CharField(max_length=20)
    description = models.TextField()
    slug = models.SlugField()
    def __str__(self):
        return self.person

视图.py

def blog_category(request, category):
    posts = Post.objects.filter(categories__slug__contains=category).order_by("-created_on").distinct()
    context = {"category": category, "posts": posts}

    return render(request, "blog_category.html", context)

HTML(本地主机:8000/slug)

{{ person }}
{{ description }}

这是my models.py的完整代码

class Category(models.Model):
    person = models.CharField(max_length=20)
    description = models.TextField()
    slug = models.SlugField()
    def __str__(self):
        return self.person


class Recommender(models.Model):
    recommender_name = models.CharField(max_length=20)
    slug = models.SlugField()

    def __str__(self):
        return self.recommender_name


class Post(models.Model):
    book_title = models.CharField(max_length=255)
    author = models.CharField(max_length=255)
    book_link = models.CharField(max_length=255)
    recommenders = models.ForeignKey("Recommender", on_delete=models.CASCADE,)

    source = models.TextField()
    source_link = models.CharField(max_length=255)
    created_on = models.DateTimeField(auto_now_add=True)
    last_modified = models.DateTimeField(auto_now=True)

    categories = models.ManyToManyField("Category", related_name="posts")

    slug = models.SlugField()

    def __str__(self):
        return self.book_title

Tags: pyselfmodelreturnmodelsdefdescriptionlength
2条回答
posts = Post.objects.filter(categories__slug__contains=category).order_by("-created_on").distinct()

将返回查询集。它可以有多个模型类实例(因为您使用的是filter)。在您的上下文中,您将此查询集作为posts发送到您的模板

所以在你的HTML中你可以使用这样的东西。您需要使用for循环,因为posts中可以有多个项

{% for post in posts %}
    {% for category in post.categories.all %}
        {{ category.person }}
        {{ category.description }}
    {% endfor %}
{% endfor %}

我会看看this example

也就是说,如果按照示例中所示的方式呈现模板,则应该能够

{{ category.person }} {{ category.description }}

相关问题 更多 >