我想在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
谢谢
答案 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