首页 > 解决方案 > 如何在 django 上显示类别标题

问题描述

我的问题是在类别页面中,标题、元标题和元描述没有显示。

我在下面上传的图片中展示了它。

我该如何解决?

谢谢

模型.py

class Category(models.Model):
    parent = models.ForeignKey('self', blank=True, null=True, related_name='children', on_delete=models.CASCADE)
    title = models.CharField(max_length=70, unique=True)
    slug = models.SlugField(max_length=70, unique=True)
    description = RichTextUploadingField(blank=True, null=True)
    meta_title = models.CharField(max_length=120, unique=True, blank=True, null=True)
    meta_description = models.TextField(max_length=175, blank=True, null=True)

    def __str__(self):
       return self.title
    
    class MPTTMeta:
       order_insertion_by = ['title']

视图.py

class PostCategoryView(generic.ListView):
    template_name = 'posts_category.html'
    paginate_by = 9

    def get_queryset(self):
        slug = self.kwargs.get('slug')
        return Post.objects.filter(category__slug=slug, status=1)

    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        context['category'] = Category.objects.all()
        return context

类别模板

{% extends 'shared/_MainLayout.html' %}
{% load static %}
{% block head %}
{% block title %}**{{ category.meta_title }}**{% endblock %}
{% block description %}**{{ category.meta_description }}**{% endblock %}
{% endblock %}
{% block content %}
                <div class="page-header page-header-style-1 text-center mt-50">
                    <div class="container">
                        <h2><span class="color2">**{{ category.title }}**</span></h2>
                        <div class="breadcrumb">
                            <a href="/" rel="nofollow">Home</a> &nbsp; > &nbsp;
                            <span></span><a href="/{{ category.slug }}/" rel="nofollow">**{{ category.title }}**</a>
                        </div>
                    </div>
                </div>
{% endblock %}

问题图片

标签: pythondjango

解决方案


您可以设置context_object_name访问模板中的对象。或者您可以使用默认名称 {{ object_list }}。

例如:

class PostCategoryView(generic.ListView):
    template_name = 'posts_category.html'
    paginate_by = 9
    context_object_name = Example
    model = Category

    def get_queryset(self):
        slug = self.kwargs.get('slug')
        return Post.objects.filter(category__slug=slug, status=1)

    def get_context_data(self, **kwargs):
        context = super().get_context_data()
        context['category'] = Category.objects.all()
        return context

现在您可以在模板中使用它:

{% for category in Example %}
    <li>{{ category.title }}</li>
{% endfor %}

如果您没有设置 context_object_name,您可以使用默认名称“object_list”,如下所示:

{% for category in object_list %}
    <li>{{ category.title }}</li>
{% endfor %}

您还必须在 ListView 中设置模型,例如:model = Category


推荐阅读