Не найден реверс для 'product_by_catagory' с аргументами '('d', 'r', 'e', 's', 's')'. Проверено 1 шаблон(ы): ['(?P<c_slug>[-a-zA-Z0-9_]+)\\/$']
urls.py
from django.urls import path
from . import views
app_name='shop'
urlpatterns = [
path('',views.allproduct,name='allproductcat'),
path('<slug:c_slug>/',views.allproduct,name='product_by_catagory')
]
views.py
from django.shortcuts import render, get_object_or_404
from . models import catagory,product
# Create your views here.
def allproduct(request,c_slug=None):
c_page=None
products=None
if c_slug!=None:
c_page=get_object_or_404(catagory,slug=c_slug)
products=product.objects.all().filter(catagory=c_page,available=True)
else:
products=product.objects.all().filter(available=True)
return render(request,'catagory.html',{'catagory':c_page,'products':products})
catagory.html
{% extends 'base.html' %}
{% load static %}
{% block metadiscription %}
{% if catagory %}
{{catagory.discription}}
{% else %}
welcome
{% endif %}
{% endblock %}
{% block title %}
{% if catagory %}
{{catagory.name}}--ABC store
{% else %}
see our new collection
{% endif %}
{% endblock %}
{% block content %}
{% if catagory %}
<div>
<div>
<a href="{% url 'shop:allproduct' %}">OUR PRODUCT COLLECTION</a>
</div>
</div>
{% endif %}
<div>
{% if catagory %}
<img src="{{catagory.img.url}}" alt="{{catagory.name}}">
</div>
<br>
<div>
<h1>
{{catagory.name}}
</h1>
<p>
{{catagory.discription}}
</p>
</div>
{% else %}
<div>
<img src="{% static 'img/banner.png' %}">
</div>
<br>
<div>
<h1>OUR PRODUCT COLLECTION</h1>
<p>INDIA IS MY COUNTRY I LOVE MY COUNTRY</p>
</div>
{% endif %}
<div>
<div>
{% for product in products %}
<div>
<div>
<a href="" ><img src="{{product.img.url}}"></a>
<div>
<h4>{{product.name}}</h4>
<p>{{product.price}}</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
{% endblock %}
navbar.html
<nav>
<ul>
<li><a href="{% url 'shop:allproductcat' %}">ALL PRODUCTS</a></li>
{% for cat in links %}
<li><a href="{{cat.get_url}}"></a></li>
{% endfor %}
<li>YOUR CART</li>
</ul>
</nav>
context_processors.py
from . models import catagory
def menu_link(request):
link=catagory.objects.all()
return dict(links=link)
models.py
from django.db import models
# Create your models here.
from django.urls import reverse
class catagory(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='catagory',blank=True)
class Meta:
ordering=('name',)
verbose_name='catagory'
verbose_name_plural='catagories'
def __str__(self):
return '{}'.format(self.name)
def get_url(self):
return reverse('shop:product_by_catagory',args=self.slug)
Я получаю ошибку, что обратный запрос для slug не найден, я не могу открыть свой сайт, пожалуйста, решите мою проблему. Реверс для 'product_by_catagory' с аргументами '('d', 'r', 'e', 's', 's')' не найден. Испробован 1 шаблон(ы): ['(?P<c_slug>[-a-zA-Z0-9_]+)\/$'].Я не могу запустить свой код, пожалуйста, помогите мне решить эту проблему
Вы передаете элементы в args как итерабель объектов, даже если есть только один параметр. Таким образом, вы не должны реализовывать это как:
reverse('shop:product_by_catagory', args=self.slug)
но как:
reverse('shop:product_by_catagory', args=(self.slug,))
здесь мы, таким образом, оборачиваем элемент в кортеж singleton, такой, что он содержит только один элемент: slug
объект Category
.
Примечание: Обычно модели Django реализуют метод
.get_absolute_url()
[Django-doc]. для определения канонического URL для этой модели, а не. Преимущество работы сget_url
get_absolute_url
в том, что вы можете, например, передать это в методredirect(…)
функции [Django-doc] и тогда она автоматически вернет ответ HTTP редиректа с URL созданным с помощью метода.get_absolute_url()
.