【发布时间】:2020-07-18 18:52:10
【问题描述】:
创建产品标签单独工作,但如果我在产品中添加任何条目(应该与产品标签链接)它会产生错误。
这是来自应用程序的网址:
from django.contrib.auth import views as auth_views
from django.urls import path, include
from django.views.generic import TemplateView
from django.views.generic.detail import DetailView
from main import views
from main import forms
from main import models
path(
"products/<slug:tag>/",
views.ProductListView.as_view(),
name="products",
),
这里是models.py:
class ProductTag(models.Model):
name = models.CharField(max_length=40)
slug = models.SlugField(max_length=48)
description = models.TextField(blank=True)
active = models.BooleanField(default=True)
objects = ProductTagManager()
def __str__(self):
return self.name
def natural_key(self):
return (self.slug,)
class ActiveManager(models.Manager):
def active(self):
return self.filter(active=True)
class Product(models.Model):
name = models.CharField(max_length=40)
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=6, decimal_places=2)
slug = models.SlugField(max_length=48)
tags = models.ManyToManyField(ProductTag, blank=True)
active = models.BooleanField(default=True)
in_stock = models.BooleanField(default=True)
date_updated = models.DateTimeField(auto_now=True)
objects = ActiveManager()
def __str__(self):
return self.name
class ProductImage(models.Model):
product = models.ForeignKey(
Product, on_delete=models.CASCADE
)
image = models.ImageField(upload_to="product-images")
thumbnail = models.ImageField(
upload_to="product-thumbnails", null=True
)
这里是views.py:
class ProductListView(ListView):
template_name = "main/product_list.html"
paginate_by = 4
def get_queryset(self):
tag = self.kwargs["tag"]
self.tag = None
if tag != "all":
self.tag = get_object_or_404(
models.ProductTag, slug=tag
)
if self.tag:
products = models.Product.objects.active().filter(
tags=self.tag
)
else:
products = models.Product.objects.active()
return products.order_by("name")
错误页面如下所示:
NoReverseMatch at /products/romance/
Reverse for 'product' not found. 'product' is not a valid view
function or pattern name.
Request Method: GET
Request URL: http://127.0.0.1:8000/products/romance/
Django Version: 3.0.4
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'product' not found. 'product' is not a valid view
function or pattern name.
Exception Location:
/home/kash/.local/share/virtualenvs/booktimes-
7D7i9gyr/lib/python3.7/site-packages/django/urls/resolvers.py in
_reverse_with_prefix, line 677
Python Executable:
/home/kash/.local/share/virtualenvs/booktimes-7D7i9gyr/bin/python
Python Version: 3.7.3
Python Path:
['/home/kash/py/booktimes',
'/usr/lib/python37.zip',
'/usr/lib/python3.7',
'/usr/lib/python3.7/lib-dynload',
'/home/kash/.local/share/virtualenvs/booktimes-
7D7i9gyr/lib/python3.7/site-packages']
Server time: Mon, 6 Apr 2020 21:46:14 +0000
Error during template rendering
In template /home/kash/py/booktimes/main/templates/base.html, error
at line 8
Reverse for 'product' not found. 'product' is not a valid view
function or pattern name.
{% load static %}
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta
name="viewport"
content="width=device-width, initial-scale=1, shrink-to
fit=no">
<link
rel="stylesheet"
href="{% static "css/bootstrap.min.css" %}">
<title>BookTime</title>
<!-- Booktime version: {{ VERSION }} -->
<script charset="utf-8">
var tracker_id = {{ GA_TRACKER_ID }};
我认为问题出在模型之间“加入”的某个地方,很遗憾,即使彻底检查仍然无法找到错误,我也找不到错误............
【问题讨论】:
标签: django python-3.x django-models django-views