我需要在HTML模板中显示基于类型的绘画

问题描述

我正在做一个美术画廊的项目,并且根据每种绘画类型有不同的页面,例如。印象派,超现实主义等

我复制了所有绘画模板,并想对其进行修改,使其仅显示选定的流派。

这是我的all_paintings视图

def all_products(request):
"""a view to show all products including search"""

products = Painting.objects.all()
products = Painting.objects.filter(genre__name='genre')

for p in products:
    print(p)

context = {
    'products': products,}

return render(request,'products/paintings.html',context)

Id想知道是否可以向现有的类中添加上述过滤器,或者创建一个全新的类?

以及我要添加到HTML模板中的内容,以便显示特定类型的绘画

解决方法

例如:

  1. 过滤器:
import pandas as pd
from datetime import datetime

# get the date string
datestring = datetime.strftime(datetime.now(),'%d-%b')

# read archive
arch = pd.read_csv('archive.csv')

# rename columns
arch.rename(columns={'date': 'email'},inplace=True)

# read working,but only the two columns that are needed
working = pd.read_csv('working.csv',header=None,usecols=[1,3])

# rename columns
working.rename(columns={1: 'email',3: datestring},inplace=True)

# only emails greater than 30 or already in arch
working = working[(working[datestring] > 30) | (working.email.isin(arch.email))]

# merge
arch_updated = pd.merge(arch,working,on='email',how='outer').fillna(0)

# save to csv
arch_updated.to_csv('archive.csv',index=False)

# display(arch_updated)
          email  01-sep  27-Aug
 [email protected]   154.0    31.0
 [email protected]   128.0    19.0
 [email protected]    77.0    92.0
 [email protected]    63.0     0.0
 [email protected]     0.0   117.0
  1. 提出HTML表示法的问题: 是的,可以通过诸如jinja2之类的框架或html渲染包来实现。检查一下。
,

假设您有一个单独的模型Genre,并且带有一个Slug字段,那么我将设置一个单独的URL和视图来处理类型。

例如在urls.py中添加以下内容:

path('products/<slug:genre_slug>',views.genre,name='genre')

在views.py中:

from django.shortcuts import get_object_or_404


def genre(request,genre_slug):

    genre = get_object_or_404(Genre,slug=genre_slug)

    products = Painting.objects.filter(genre=genre)

    context = {
        'products': products,'genre': genre
    }
    
    return render(request,'products/genre.html',context)

然后在模板中,起点将是:

<h1>Products in {{ genre.name }} genre</h1>

{% for product in products %}
    {{ product.title }}
{% endfor %}