Как я могу иметь одинаковый html для нескольких категорий или страниц, а затем добавить к ним определенные или различные данные из базы данных в django restframework?

В этой программе у меня есть эти две функции в моем views.py:

def home(request):
    p=product.objects.all()
    return render(request,'home.html',{'p':p})

def foods(request):
    p=product.objects.all()
    return render(request,'foods.html',{'p':p})

Они оба имеют доступ к одним и тем же данным из базы данных, то есть если я хочу разместить некоторый json с помощью django restframework, то foods и home будут иметь одни и те же данные, потому что у них один и тот же html:

    <div class="grid">  
        {% for i in p%} 
                
                    <div class='card'>
                        <img src="{{i.image}}"></img>
                        <p id="id">{{i.description}}</p>
                        <a href="{{i.buy}}" target='_blank' rel='noopener noreferrer'>
                            <button><span class="price"> ${{i.price}}</span> buy</button>
                        </a>    




                    </div>

        {%endfor%}
    </div>

для меня хорошо иметь только один html для нескольких страниц и затем доступ к различным данным из базы данных, но если я добавлю некоторый json, то оба будут содержать одинаковые данные (по какой-то причине данные foods пустые, но он будет генерировать то же количество продуктов на основе json, как home)

Я хочу знать, как можно иметь одинаковый html для нескольких категорий или страниц, а затем добавлять к ним определенные или различные данные из базы данных?

Более подробная информация:

models.py:

from django.db import models
 
# Create your models here.
class product(models.Model):
     
     
    image=models.CharField(max_length=500)
    description=models.CharField(max_length=500)
    price=models.CharField(max_length=50)
    buy=models.CharField(max_length=100)
 

serializers.py:

from rest_framework import serializers
from .models import product
 


class productSerializer(serializers.ModelSerializer):
    class Meta:
        model= product
        fields="__all__"
 

views.py:

from django.shortcuts import render
from .models import *
from rest_framework import viewsets,status
from .serializers import productSerializer
from rest_framework.parsers import JSONParser
from django.http import HttpResponse,JsonResponse
from rest_framework.response import Response
from rest_framework.decorators import action

class productviewset(viewsets.ModelViewSet):
    queryset=product.objects.all()
    serializer_class = productSerializer 

    def create(self, request):
        serialized = productSerializer(data=request.data, many=True)
        if serialized.is_valid():
            serialized.save()
            return Response(serialized.data, status=status.HTTP_201_CREATED)
        return Response(serialized._errors, status=status.HTTP_400_BAD_REQUEST)

    @action (detail=False , methods=['post']) 
    def delete(self,request):
        product.objects.all().delete()
        return Response('success')
def home(request):
    p=product.objects.all()
    return render(request,'home.html',{'p':p})

def foods(request):
    p=product.objects.all()
    return render(request,'foods.html',{'p':p})

Если у меня есть 20 категорий с 20 различными страницами, я никогда не буду создавать 20 различных баз данных, если есть способ для этих категорий получить доступ конкретно из одной базы данных.

Если я правильно понимаю вопрос и у вас будет определенное количество товаров, разделенных на 20 категорий, то я как-то использовал следующее Вам нужно создать отдельную модель для категорий, а в модели товара добавить внешний ключ на категорию

models.py

class Category(models.Model):
    name = models.CharField(max_length=200, db_index=True)
    slug = models.SlugField(max_length=200, db_index=True, unique=True)
    
    def get_absolute_url(self):
        return reverse('shop:product_list_by_category',
                        args=[self.slug])

    def __str__(self):
        return self.name



class Product(models.Model):
    category = models.ForeignKey(Category, related_name='products')
    available = models.BooleanField(default=True)
    ...

views.py

def product_list(request, category_slug=None):
    category = None
    categories = Category.objects.all()
    products = Product.objects.filter(available=True)
    if category_slug:
        category = get_object_or_404(Category, slug=category_slug)
        products = products.filter(category=category)
    return render(request,
                  'shop/product/list.html',
                  {'category': category,
                   'categories': categories,
                   'products': products})

urls.py

from django.urls import path
from . import views

app_name = 'shop'

urlpatterns = [
    path('', views.product_list, name='product_list'),
    path('<category_slug>', views.product_list, name='product_list_by_category'),
]

html

{% block content %}
    <div id="main" class="product-list">
        <h1>{% if category %}{{ category.name }}{% else %}Products{% endif %}</h1>
        {% for product in products %}
            <div class="item">
               <img src="{% if product.image %}{{ product.image.url }}{% else %}{% static "img/no_image.png" %}{% endif %}">
            </div>
        {% endfor %}
    </div>
{% endblock %}
Вернуться на верх