【问题标题】:NoReverseMatch at /products/drama/ - Reverse for 'product' not found. 'product' is not a valid view function or pattern nameNoReverseMatch at /products/drama/ - 未找到“产品”的反向。 “产品”不是有效的视图函数或模式名称
【发布时间】: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


    【解决方案1】:

    我正试图找到你称之为视图的地方。我认为你在那里打错了;产品而不是产品(这是在您的 urls.py 文件中调用它的方式)。

    所以我认为这是您对这种观点的引用之一。将此更改为产品,它应该可以工作。

    【讨论】:

      猜你喜欢
      • 2019-06-01
      • 2019-05-19
      • 2019-08-13
      • 1970-01-01
      • 1970-01-01
      • 2019-04-21
      • 2019-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多