我正在学习django框架,并希望创建一个网站,在这里,被指定为“艺术家”的用户可以发布到网站
为避免混淆thcWebsite是项目名称。thcStore是项目中的一个应用程序
尝试加载时收到以下错误localhost:8000/thcStore/ 你知道吗
NoReverseMatch at /thcStore/
Reverse for 'product_detail' with arguments '(8, '')' not found. 1 pattern(s) tried: ['thcStore/(?P<id>[0-9]+)/(?P<slug>[-a-zA-Z0-9_]+)/$']
Request Method: GET
Request URL: http://localhost:8000/thcStore/
Django Version: 2.2.2
Exception Type: NoReverseMatch
Exception Value:
Reverse for 'product_detail' with arguments '(8, '')' not found. 1 pattern(s) tried: ['thcStore/(?P<id>[0-9]+)/(?P<slug>[-a-zA-Z0-9_]+)/$']
Exception Location: C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\urls\resolvers.py in _reverse_with_prefix, line 668
Environment:
Request Method: GET
Request URL: http://localhost:8000/thcStore/
Django Version: 2.2.2
Python Version: 3.7.1
Installed Applications:
['django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'bootstrap3',
'cart.apps.CartConfig',
'orders.apps.OrdersConfig',
'accounts',
'payment.apps.PaymentConfig',
'thcStore']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware']
Template error:
In template C:\Users\Taha Arif\Desktop\Web Development\Personal Website\django_THC\thcWebsite\templates\base.html, error at line 51
Reverse for 'product_detail' with arguments '(8, '')' not found. 1 pattern(s) tried: ['thcStore/(?P<id>[0-9]+)/(?P<slug>[-a-zA-Z0-9_]+)/$']
41 : <div class="dropdown-menu" aria-labelledby="navbarDropdown">
42 : <a class="dropdown-item" href="{% url 'accounts:user_profile' user.display_name %}">Profile</a>
43 : <a class="dropdown-item" href="#">Settings</a>
44 : <a class="dropdown-item" href="{% url 'accounts:thanks' %}">Logout</a>
45 : </div>
46 : {% else %}
47 : <div class="dropdown-menu" aria-labelledby="navbarDropdown">
48 : <a class="dropdown-item" href="#">Settings</a>
49 : <a class="dropdown-item" href="{% url 'accounts:thanks' %}">Logout</a>
50 : <div class="dropdown-divider"></div>
51 : <a class="dropdown-item" hr ef="#">Why make an account?</a >
52 : </div>
53 : {% endif %}
54 : {% else %}
55 : <div class="dropdown-menu" aria-labelledby="navbarDropdown">
56 : <a class="dropdown-item" href="{% url 'accounts:signup' %}">Register</a>
57 : <a class="dropdown-item" href="{% url 'accounts:login' %}">Login</a>
58 : <div class="dropdown-divider"></div>
59 : <a class="dropdown-item" href="#">Why make an account?</a>
60 : </div>
61 : {% endif %}
Traceback:
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\core\handlers\exception.py" in inner
34. response = get_response(request)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\core\handlers\base.py" in _get_response
115. response = self.process_exception_by_middleware(e, request)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\core\handlers\base.py" in _get_response
113. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Taha Arif\Desktop\Web Development\Personal Website\django_THC\thcWebsite\thcStore\views.py" in product_list
22. 'products': products,},)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\shortcuts.py" in render
36. content = loader.render_to_string(template_name, context, request, using=using)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\loader.py" in render_to_string
62. return template.render(context, request)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\backends\django.py" in render
61. return self.template.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
171. return self._render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\loader_tags.py" in render
150. return compiled_parent._render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\loader_tags.py" in render
150. return compiled_parent._render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in _render
163. return self.nodelist.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\loader_tags.py" in render
62. result = block.nodelist.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\loader_tags.py" in render
62. result = block.nodelist.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
937. bit = node.render_annotated(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\defaulttags.py" in render
209. nodelist.append(node.render_annotated(context))
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render_annotated
904. return self.render(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in render
987. output = self.filter_expression.resolve(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in resolve
671. obj = self.var.resolve(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in resolve
796. value = self._resolve_lookup(context)
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\template\base.py" in _resolve_lookup
858. current = current()
File "C:\Users\Taha Arif\Desktop\Web Development\Personal Website\django_THC\thcWebsite\thcStore\models.py" in get_absolute_url
55. args=[self.id, self.slug])
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\urls\base.py" in reverse
90. return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File "C:\Users\TAHAAR~1\Envs\MYPROJ~1\lib\site-packages\django\urls\resolvers.py" in _reverse_with_prefix
668. raise NoReverseMatch(msg)
Exception Type: NoReverseMatch at /thcStore/
Exception Value: Reverse for 'product_detail' with arguments '(8, '')' not found. 1 pattern(s) tried: ['thcStore/(?P<id>[0-9]+)/(?P<slug>[-a-zA-Z0-9_]+)/$']
这让我很困惑,因为导航到localhost:8000/thcStore 应调用产品列表视图。不确定产品详细信息视图是什么导致了问题
第一次看到这个错误,我认为这是我的base.html文件中的一个问题。 但是当我删除一些东西并清理代码时,我发现错误总是出现在第51行,这让我相信问题不在base.html文件中,我不知道还能去哪里检查
thcStore的views.py
from django.shortcuts import render, get_object_or_404
from .models import Category, Product
from cart.forms import CartAddProductForm
from django.views.generic import CreateView
from .forms import ProductCreateForm
from django.urls import reverse_lazy
def product_list(request, category_slug=None):
# Catalog View
category = None
categories = Category.objects.all()
products = Product.objects.filter(available=True)
if category_slug:
category = get_object_or_404(Category, slug=category_slug)
products = products.filter(category=category)
return render(request,
'thcStore/product/list.html',
{'category': category,
'categories': categories,
'products': products,},)
def product_detail(request, id, slug):
#product View
product = get_object_or_404(Product,
id=id,
slug=slug,
available=True)
cart_product_form = CartAddProductForm()
return render(request, 'thcStore/product/detail.html',
{'product': product,
'cart_product_form': cart_product_form})
class product_create(CreateView):
# form_class = forms.ProductCreateForm
form_class = ProductCreateForm
success_url = reverse_lazy("login")
template_name = "thcStore/product/create.html"
thcStore的url.py
from django.urls import path
from . import views
app_name = 'thcStore'
urlpatterns = [
path('', views.product_list, name='product_list'),
path('product_create/', views.product_create.as_view(), name='product_create'),
path('<slug:category_slug>/', views.product_list, name='product_list_by_category'),
path('<int:id>/<slug:slug>/', views.product_detail, name='product_detail'),
]
用于thcStore的models.py
from django.db import models
from django.urls import reverse
from django.utils.text import slugify
class Category(models.Model):
name = models.CharField(max_length=200,
db_index=True)
slug = models.SlugField(max_length=200,
unique=True)
class Meta:
ordering = ('name',)
verbose_name = 'category'
verbose_name_plural = 'categories'
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('thcStore:product_list_by_category',
args=[self.slug])
class Product(models.Model):
category = models.ForeignKey(Category,
related_name='products',
on_delete=models.CASCADE)
name = models.CharField(max_length=200, db_index=True)
slug = models.SlugField(max_length=200, db_index=True)
image = models.ImageField(upload_to='products/%Y/%m/%d',
blank=True)
owner= models.CharField(max_length=200, db_index= True, default= '')
description = models.TextField(blank=True)
price = models.DecimalField(max_digits=10, decimal_places=2)
available = models.BooleanField(default=True)
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
# slug= slugify(name)
class Meta:
ordering = ('name',)
index_together = (('id', 'slug'),)
def save(self, *args, **kwargs):
if not self.id:
# Newly created object, so set slug
self.s = slugify(self.q)
super(Test, self).save(*args, **kwargs)
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('thcStore:product_detail',
args=[self.id, self.slug])
我希望我应该能够加载产品列表视图时localhost:8000/thcStore/ 被称为
可以使用您的故障排除技巧,或发人深省的问题
编辑:问题已解决
我有一个产品没有造成错误的子弹。删除该产品解决了问题
查看错误跟踪时,请始终查找包含文件的行,而不是包文件。情况并非总是如此(尤其是模板中的错误),但在您的情况下,您自己的代码中有两行错误:
最底层的总是真正的罪魁祸首。第一个指向对
render()
的调用,该调用触发模板呈现链。在模板中,可能有一个{% url product %}
调用Product
的get_absolute_url()
如您所见,这个错误告诉您它正在用参数
'(8, '')'
为“产品详细信息”调用reverse
,这意味着self.slug
是该特定产品的空字符串你应该检查一下你的
Product.save()
方法,我认为它试图为每个产品创建一个slug,但是没有。什么是self.s
什么是self.q
这个错误告诉您,在呈现产品列表页的过程中,它被要求为产品8生成一个指向产品详细信息页的链接——可能,您的列表页链接到详细信息页,正如您所期望的那样
它还告诉您,在生成链接时,它调用的是product
get_absolute_url
方法。该方法使用reverse
查找给定id和slug的产品的URL。不幸的是,产品8的slug是一个空字符串,因此它不能为该产品生成一个与URL模式匹配的URL(这需要一个非空slug)您应该通过管理员修复该产品(可能还有其他产品)的slug,然后研究它是如何用空slug保存的;我要指出的是,
save
方法看起来很狡猾(什么是self.q
?)相关问题 更多 >
编程相关推荐