Django列表类别将无法正常工作

时间:2018-06-27 12:48:28

标签: django list

我想在Django模板中列出所有类别 但我什么也没回去:

category_list:html

{% extends 'quickblog/base.html' %}
{% load readmore %}

{% block content %}
    {% for categories in categories %}
            <h1>{{ categories.titel }} {{ categories.post_set.count }}</h1>
            <p>{{ categories.description|readmore:15|linebreaksbr }}</p>
    {% endfor %}
{% endblock %}

“ readmore”只是一个模板过滤器,请忽略它。

urls.py

url(r'^categories/$', TemplateView.as_view(template_name='quickblog/category_list.html'), name='categories'),

models.py

class Category(models.Model):
    title = EncryptedCharField(max_length=255, verbose_name="Title")
    description = EncryptedTextField(max_length=1000, null=True, blank=True)
    categorycover = fields.ImageField(upload_to='categorycovers/', blank=True, null=True, dependencies=[
        FileDependency(processor=ImageProcessor(
            format='JPEG', scale={'max_width': 350, 'max_height': 350}))
    ])
    categoryicon = fields.ImageField(upload_to='categoryicons/', blank=True, null=True, dependencies=[
        FileDependency(processor=ImageProcessor(
            format='JPEG', scale={'max_width': 16, 'max_height': 16}))
    ])

    class Meta:
        verbose_name = "Category"
        verbose_name_plural = "Categories"
        ordering = ['title']

    def __str__(self):
        return self.title

谢谢

2 个答案:

答案 0 :(得分:1)

请勿在循环中重新分配categories。使用其他变量名。

{% for categories in categories %}

相反:

{% for category in categories %}

也。您在哪里定义categories模板上下文变量?默认情况下,通用ListView插入一个名为object_list的上下文变量。 TemplateView仅添加从url模式捕获的上下文变量。

我建议您创建一个继承ListView的视图

from django.views.generic.list import ListView
from myapp.models import Category

class CategoryListView(ListView):

    model = Category
    template_name='quickblog/category_list.html'

模板:

{% for category in object_list %}

答案 1 :(得分:0)

请勿在for中使用相同的变量名

{% for categories in categories %}

您应该使用

{% for category in categories %}

您的类别变量在哪里?模板为View,您只加载html,没有加载要使用的category变量,则可以做2件事...

自定义上下文处理器-使用上下文处理器设置的变量将在所有模板中可用,这通常用于检查用户统计信息,而无需在视图中手动进行操作,就您而言,仅当您要在所有页面中使用类别变量时才使用此功能

声明您的上下文函数

def foobar_processor(request):
    return Category.objects.all()

将其加载到您的settings.py

'OPTIONS': {
            'context_processors': [
                'foo.bar.processors.foobar_processor',
                ...,
            ],
         }

来源:https://www.webforefront.com/django/setupdjangocontextprocessors.html

视图-您可以在该视图中为您的网址设置一个视图,您可以加载上下文并将其发送到html页面

from django.views.generic.base import TemplateView

from .models import Category

class HomePageView(TemplateView):

    template_name = "quickblog/category_list.html"

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

来源:http://pythonclub.com.br/class-based-views-django.html