Я только начинаю, и у меня проблема. Я хочу получить в
SlugView список всех продуктов в данной категории ('slug').
models.py
class Category(models.Model):
category_name = models.CharField(max_length=64)
slug = models.CharField(max_length=64, unique=True)
class Product(models.Model):
name = models.CharField(max_length=128)
description = models.TextField()
price = models.FloatField()
vat = models.FloatField(choices=VAT)
stock = models.IntegerField()
categories = models.ManyToManyField(Category)
@property
def name(self):
return "Nazwa: {}, cena: {}".format(self.name, self.price)
def __str__(self):
return self.name
views.py
class SlugView(View):
def get(self, request, slug):
category = Category.objects.filter(slug=slug)
return render(request,'exercises/slug.html', {'products': products})
urls.py
re_path(r'categories/(?P<slug>\w+)', SlugView.as_view(), name = "slug")
Список ошибок: '' 'Запуск сервера разработки с http://127.0.0.1: 8000 / Завершите работу сервера с помощью CONTROL- C. [05 / Feb / 2020 09:46:37] «GET / HTTP / 1.1» 200 965 [05 / Feb / 2020 09:46:42] «GET / HTTP / 1.1» 200 965 [05 / Feb / 2020 09: 46:45] «GET / category HTTP / 1.1» 200 997 Внутренняя ошибка сервера: / Categories / 1234D Traceback (последний вызов был последним): Файл »/ home / marekk / Pulpit / kurs / Django_cwicz / venv / lib / python3 .6 / site-packages / django / template / base.py ", строка 828, в _resolve_lookup current = current [бит] TypeError: объект 'Product' недопустим
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/core/handlers/exception.py", line 34, in inner
response = get_response(request)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 115, in _get_response
response = self.process_exception_by_middleware(e, request)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/core/handlers/base.py", line 113, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/views/generic/base.py", line 71, in view
return self.dispatch(request, *args, **kwargs)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/views/generic/base.py", line 97, in dispatch
return handler(request, *args, **kwargs)
File "/home/marekk/Pulpit/kurs/django-za2/WAR_PYT_W_11_Zaawansowane_Django/3_Django/coderslab/exercises/views.py", line 30, in get
return render(request,'exercises/slug.html', {'products': products})
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/loader.py", line 62, in render_to_string
return template.render(context, request)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/backends/django.py", line 61, in render
return self.template.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 171, in render
return self._render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 163, in _render
return self.nodelist.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/defaulttags.py", line 209, in render
nodelist.append(node.render_annotated(context))
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 936, in render
bit = node.render_annotated(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 903, in render_annotated
return self.render(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 986, in render
output = self.filter_expression.resolve(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 670, in resolve
obj = self.var.resolve(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 795, in resolve
value = self._resolve_lookup(context)
File "/home/marekk/Pulpit/kurs/Django_cwicz/venv/lib/python3.6/site-packages/django/template/base.py", line 836, in _resolve_lookup
current = getattr(current, bit)
File "/home/marekk/Pulpit/kurs/django-za2/WAR_PYT_W_11_Zaawansowane_Django/3_Django/coderslab/exercises/models.py", line 88, in name
return "Nazwa: {}, cena: {}".format(self.name, self.price)
File "/home/marekk/Pulpit/kurs/django-za2/WAR_PYT_W_11_Zaawansowane_Django/3_Django/coderslab/exercises/models.py", line 88, in name
return "Nazwa: {}, cena: {}".format(self.name, self.price)
File "/home/marekk/Pulpit/kurs/django-za2/WAR_PYT_W_11_Zaawansowane_Django/3_Django/coderslab/exercises/models.py", line 88, in name
return "Nazwa: {}, cena: {}".format(self.name, self.price)
[Previous line repeated 449 more times]
RecursionError: maximum recursion depth exceeded while calling a Python object
[05/Feb/2020 09:46:49] "GET /categories/1234D HTTP/1.1" 500 1694912
'' '
Вот вам шаблоны.
template "slug. html" '' *
{% extends 'exercises/base.html' %}
{% block page_title %}
<h1>Sklep internetowy OLABOGA.</h1>
{% endblock %}
{% block content_title %}<h2>Produkty w kategorii:</h2>
{% endblock %}
{% block content %}
<ul>
{% for product in products %}
{% block element %}
<li><a href='/{% block link %}product{% endblock %}/
{{ product.name }}'>{{ product.name }}</a></li>
{% endblock %}
{% endfor %}
</ul>
{% endblock %}
'' *
template "base. html "'' '
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% block logo %}
<img src="{% static 'images/logo.png' %}" alt="Tu powinno być logo" >
{% endblock %}
{% block page_content %}
{% block page_title %}
<h1>Szkoła podstawowa nr 1 im. Chucka Norrisa.</h1>
{% endblock %}
{% block content_title %}
<h2>Klasy:</h2>
{% endblock %}
{% block content %}
<ul>
{% for object in objects %}
{% block element %}
<li><a href='/{% block link %}class{% endblock %}/{}'>{}</a></li>
{% endblock %}
{% endfor %}
</ul>
{% endblock %}
{% block additional %}
{% endblock %}
{% endblock %}
</body>
</html>
' ''
Проблема в этой части кода, но я не знаю почему:
@property
def name(self):
return "Nazwa: {}, cena: {}".format(self.name, self.price)
def __str__(self):
return self.name
в этом строка (это строка 88 в models.py)
возвращает "Nazwa: {}, cena: {}". format (self.name, self.price)
сообщения об ошибках:
Метод запроса: GET URL запроса: http://127.0.0.1: 8000 / category / 1234 C Django Версия: 3.0 Тип исключения: RecursionError Exception Valu e:
превышена максимальная глубина рекурсии при вызове объекта Python
Местоположение исключения: / home / marekk / Pulpit / kurs / django -za2 / WAR_PYT_W_11_Zaawansowane_Django / 3_Django / coderslab / упражнения /models.py в имени, строка 88
для views.py Я добавил:
from django import template
register = template.Library()
@register.filter
def multiply(value, arg):
return value * arg
к шаблону, который я добавил:
{{ product.price|multiply:product.vat }}