django: Вывод товаров на главной странице по категориям
Не выводятся товары по категориям. Если вводить вручную категорию, то на странице отображаются продукты из этой категории. Но если из навбара кликать на категорию, то на странице не высвечиваются товары из категории. И самое интересное, что при наведении мышки на категории, я вижу что она ведет по ссылке, но все равно не переходит. Никак не могу решить этот глупый вопрос.
вот код navbar
<nav class="navbar navbar-expand-md navbar-light bg-dark">
<a href="/" class="navbar-brand"><span class="material-icons text-success material-icons md-48">
shopping_basket
</span></a>
<button class="navbar-toggler bg-light" data-toggle="collapse" data-target="#navbar"><span class="navbar-toggler-icon"></span></button>
<div id="navbar" class="collapse navbar-collapse justify-content-between">
<ul class="navbar-nav">
<li class="nav-item dropdown" data-toggle="dropdown"><a class="nav-link text-light text-uppercase font-weight-bold px-3 dropdown-toggle" href="">Categories</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="{% url 'home' %}">All Products</a>
{% for category in links %}
<a class="dropdown-item" href="{{category.get_url}}">{{category.name}}</a>
{% endfor %}
</div>
</li>
<li class="nav-item"><a class="nav-link text-light text-uppercase font-weight-bold px-3" href="">Contacts</a></li>
<li class="nav-item"><a class="nav-link text-light text-uppercase font-weight-bold px-3" href="">About</a></li>
</ul>
<form class="form-inline">
<div class="input-group">
<input type="" placeholder="Search">
<div>
<button class="btn-success"><span class="material-icons material-icons md-24">
saved_search
</span></button>
</div>
</div>
</form>
</div>
</nav>
context_processors
from .models import Category
def menu_links(request):
links = Category.objects.all()
return dict(links = links)
settings.py
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'shop.context_processors.menu_links',
],
},
},
]
models.py
from django.db import models
from django.urls import reverse
# Create your models here.
class Category(models.Model):
name = models.CharField(max_length=250, unique=True)
slug = models.SlugField(max_length=250, unique=True)
description = models.TextField(blank=True)
image = models.ImageField(upload_to='category', blank=True)
class Meta:
ordering = ('name', )
verbose_name = 'category'
verbose_name_plural = 'categories'
def get_url(self):
return reverse('products_by_category', args=[self.slug])
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=250, unique=True)
slug = models.SlugField(max_length=250, unique=True)
description = models.TextField(blank=True)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
price = models.DecimalField(max_digits=10, decimal_places=2)
image = models.ImageField(upload_to='product', blank=True)
stock = models.IntegerField()
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
class Meta:
ordering = ('name', )
verbose_name = 'product'
verbose_name_plural = 'products'
def get_url(self):
return reverse('product_detail', args=[self.category.slug, self.slug])
def __str__(self):
return self.name
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name='home'),
path('<slug:category_slug>', views.home, name='products_by_category'),
path('<slug:category_slug>/<slug:product_slug>', views.product, name='product_detail'),
]