2. Asosiy va do'kon sahifasi
December 03, 2021Reja:
- Slug hususiyati
- Mahsulotlar modeli
- Mahsulotlarni qo'shish
- Asosiy sahifada mahsulotlarni ko'rsatish
- Do'kon sahifasi
- Do'kon sahifasida mahsulotlarni ko'rsatish
- Mahsulotlarni kategoriya bo'yicha ko'rsatish
1. Slug hususiyati
1. category jadvalini o'chiramiz
2. category > models.py
class Category(models.Model): ... slug = models.SlugField(max_length=50, unique=True) ...
3. category > admin.py
from django.contrib import admin from .models import Category class CategoryAdmin(admin.ModelAdmin): list_display= ('name', 'slug') prepopulated_fields = {'slug': ('name',)} admin.site.register(Category, CategoryAdmin)
2. Mahsulotlar modeli
1. python .\manage.py startapp store
2. settings.py
INSTALLED_APPS = [ ... 'store' ]
3. store > models.py
from django.db import models from category.models import Category # Create your models here. class Product(models.Model): name = models.CharField(max_length=100, unique=True) slug = models.SlugField(max_length=100, unique=True) description = models.TextField(max_length=500, blank=True) price = models.IntegerField() image = models.ImageField(upload_to = 'photoes/products') stock = models.IntegerField() is_available = models.BooleanField(default=True) category = models.ForeignKey(Category, on_delete=models.CASCADE) created_date = models.DateTimeField(auto_now_add=True) modified_date = models.DateTimeField(auto_now=True) def __str__(self) -> str: return self.name
4. store > admin.py
from django.contrib import admin from .models import Product class ProductAdmin(admin.ModelAdmin): list_display= ('name', 'price', 'stock', 'category', 'modified_date', 'is_available') prepopulated_fields = {'slug': ('name',)} # Register your models here. admin.site.register(Product, ProductAdmin)
5 python manage.py makemigrations
6 python manage.py migrate
7 python manage.py runserver
3. Mahsulotlarni qo'shish
4. Asosiy sahifada mahsulotlarni ko'rsatish
1. adana > views.py
from django.http import request from django.shortcuts import render from store.models import Product def home(request): products = Product.objects.filter(is_available=True) context = { 'products': products } return render(request, 'home.html', context)
2. templates > home.html
... <div class="row"> {% for product in products %} <div class="col-md-3"> <div class="card card-product-grid"> <a href="{% static './product-detail.html' %}" class="img-wrap"> <img src="{{product.image.url}}"> </a> <figcaption class="info-wrap"> <a href="{% static './product-detail.html' %}" class="title">{{product.name}}</a> <div class="price mt-1">$ {{product.price}}</div> <!-- price-wrap.// --> </figcaption> </div> </div> <!-- col.// --> {% endfor %} </div> ...
3. python manage.py runserver
5. Do'kon sahifasi
1. store > views.py
from django.shortcuts import render from .models import Product def store(request): return render(request, 'store.html')
2. adana > urls.py
... urlpatterns = [ ... path('store/', include("store.urls")) ] + static(MEDIA_URL, document_root=MEDIA_ROOT)
3. store > urls.py
from django.urls import path from .views import store urlpatterns = [ path('', store, name="store") ]
4. templates > store.html
4.1 shablonni yasaymiz
4.2 berilgan store.htmldan kerakli qismini ko'chirib olamiz
6. Do'kon sahifasida mahsulotlarni ko'rsatish
1. store > views.py
def store(request): products = Product.objects.filter(is_available=True) context = { 'products': products, 'product_count': products.count() } return render(request, 'store.html', context)
2. templates > store.html
<div class="row"> {% for product in products %} <div class="col-md-4"> <figure class="card card-product-grid"> <div class="img-wrap"> <img src="{{product.image.url}}"> </div> <!-- img-wrap.// --> <figcaption class="info-wrap"> <div class="fix-height"> <a href="./product-detail.html" class="title">{{product.name}}</a> <div class="price-wrap mt-2"> <span class="price">{{product.price}}</span> </div> <!-- price-wrap.// --> </div> <a href="#" class="btn btn-block btn-success">Added to cart </a> </figcaption> </figure> </div> <!-- col.// --> {% endfor %} </div> <!-- row end.// -->
7. Mahsulotlarni kategoriya bo'yicha ko'rsatish
1. store > urls.py
urlpatterns = [ ... path('<slug:category_slug>/', store, name="products_by_category"), ]
2. store > views.py
from django.shortcuts import get_object_or_404, render from category.models import Category from .models import Product def store(request, category_slug=None): if category_slug == None: products = Product.objects.filter(is_available=True) else: categories = get_object_or_404(Category, slug=category_slug) products = Product.objects.filter(is_available=True, category=categories) context = { 'products': products, 'product_count': products.count() } return render(request, 'store.html', context)