簡體   English   中英

如何通過Django中的views.py將models.py中的多個值傳遞給HTML

[英]How to pass multiple values from models.py to HTML via views.py in Django

我的 Django 博客有以下models.py ,我制作了以下views.py來為我的 URL 參數傳遞 slug 的值。
但是,我正在努力在視圖中創建 model 以從類別 class 獲取其他數據(人物和描述)。
我自己嘗試了一些模式,但無法將它們傳遞給 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 }}

這是我的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

我會看看這個例子

也就是說,如果您像示例中顯示的那樣渲染模板,您應該能夠做到

{{ category.person }} {{ category.description }}
posts = Post.objects.filter(categories__slug__contains=category).order_by("-created_on").distinct()

將返回一個查詢集。 它可以有多個 model class 實例(因為您使用的是filter )。 在您的上下文中,您將此查詢集作為posts發送到您的模板。

所以在你的 HTML 中你可以使用這樣的東西。 您需要使用 for 循環,因為posts中可以有多個項目。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM