Django 模板 - 过滤内容

我有两个模型 - “产品”和“类别”,每个产品都可以添加到现有类别中。我正在尝试找到一种方法来呈现包含按类别过滤的产品的页面。目前,我通过在模板中手动过滤每个类别来完成此操作:


{% for instance in object_list %}

    {% if instance.category.categoryname == "Statues" %}

        {{ instance.name }}

        {{ instance.description }}

        {{ instance.price }}

    {% endif %}

{% endfor %}

我对每个类别(“绘画”、“珠宝”等)都有相同的模板,并更改了每个模板中的条件。URL“../Statues”指向预先存在的模板


有什么办法可以更轻松地做到这一点吗?我希望 从 URL 导入条件{% if instance.category.categoryname == "Statues" %} 。因此,当您访问“../Jewelry”时,模板将从 URL 导入“Jewelry”并相应地过滤内容。


models.py


class Category(models.Model):

    categoryname = models.CharField(max_length=20)

    description = models.CharField(max_length=200, blank=True, null=True)

    #To make in name, not objXXX

    def __str__(self):

        return self.categoryname


class Product(models.Model):

    name = models.CharField(max_length=20)

    image = models.ImageField(upload_to='static/photos', default='http://placehold.it/700x400')

    description = models.TextField(max_length=200, blank=True, null=True)

    price = models.DecimalField(decimal_places=2, max_digits=10)

    category = models.ForeignKey(Category, on_delete=models.PROTECT, blank=True, null=True)

    #To make in name, not objXXX

    def __str__(self):

        return self.name

urls.py


urlpatterns = [

    path('admin/', admin.site.urls),

    path('<str:categoryname>', category_filter)

]

view.py


def category_filter(request, categoryname):

    queryset = Product.objects.all()

    context = {"object_list": queryset}

    return render(request, "category_filter.html", context)

类别选择模板:


{% for instance in category_list %}


<a href="{{ instance.categoryname }}" class="list-group-item">{{ instance.categoryname }}</a>


{% endfor %}


素胚勾勒不出你
浏览 80回答 1
1回答

杨__羊羊

这可能太简单了......您可以在视图中应用过滤器并基于此发送查询集:def category_filter(request, categoryname):&nbsp; &nbsp; category=Category.objects.get(categoryname=categoryname)&nbsp; &nbsp;&nbsp; &nbsp; queryset = Product.objects.filter(category=category)&nbsp; &nbsp; context = {"product_list": queryset}&nbsp; &nbsp; return render(request, "category_filter.html", context)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python