在模板中放置类别以下的项



所以我用Django写了一个小的购物清单应用程序。用户可以输入他们想要的物品,这些物品存储在数据库中,与他们所在的类别一起,使呈现给用户的列表更清晰,并给他们(用户)一个很好的概述,他们将购买什么。目标是向用户显示已分类的列表,如下所示:

蔬菜
  • 辣椒>西红柿
  • 不同

    • 卫生纸

    等等。我在我的数据库中保存了五个类别,用户可以选择一个相应的类别,一旦他们将一个项目添加到列表中,该项目将显示在列表中。

    这些是我的数据库模型:

    from django.db import models
    class Category(models.Model):
    name = models.CharField(max_length=20)
    tag = models.CharField(max_length=2)
    def __str__(self):
    return self.name
    class Item(models.Model):
    text = models.CharField(max_length=40)
    count = models.CharField(max_length=100)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    complete = models.BooleanField(default=False)
    
    def __str__(self):
    return self.text
    

    this is my views.py

    def items(request):
    item_list = Item.objects.order_by('id')
    categories = Category.objects.all()
    form = ItemForm()
    context = {'item_list' : item_list, 'form' : form, 'categories' : categories}
    return render(request, 'buyit/index.html', context)
    
    这是我的index.html(非常基本,剥离了所有的CSS和HTML的东西):
    {% for category in categories %}
    <h4>{{ category.name }}</h4>
    {% for item in category.item_set.all() %}
    {{ item.text }}
    {% endfor %}
    {% endfor %}
    

    我从一个代码片段的Jinja2模板得到了这个函数,它可能是,我没有正确理解它。但是,调试器告诉我:

    TemplateSyntaxError at /
    Could not parse the remainder: '()' from 'category.item_set.all()'
    

    任何提示我做错了什么?简单地显示类别工作得很好,但在添加

    之后
    {% for item in category.item_set.all() %}
    {{ item.text }}
    {% endfor %}
    

    坠毁。任何帮助都非常感谢!

    提前感谢!

    你不能在django模板中使用()。只需删除它们以调用函数/方法。

    从https://docs.djangoproject.com/en/3.1/ref/templates/language/

    #变量

    幕后从技术上讲,当模板系统遇到点时,它会按照以下顺序进行查找:

    • 字典查找
    • 属性或方法查找
    • 数字索引查找

    如果结果值是可调用的,则不带参数调用它。调用的结果成为模板值。

    try this:

    views.py:

    def items(request):
    commoditys = {category: Item.objects.filter(category=category) for category in Category.objects.all()}
    form = ItemForm()
    context = {'commoditys' : commoditys, 'form' : form}
    return render(request, 'buyit/index.html', context)
    

    index . html:

    {% for category, commoditys in commoditys.items %}
    <h3>{{ category.name }}</h3>
    {% for commodity in commoditys %}
    {{ commodity.text }}
    {% endfor %}
    {% endfor %}
    

    将Category变量更改为字典,其中每个条目的Key为Category对象,其对应的值为它所属的条目Queryset

    相关内容

    • 没有找到相关文章

    最新更新