python - NoReverseMatch at / Reverse for 'products' with arguments '('',)' 未找到。尝试了 1 种模式:['products/(?P[^/]+)/$']
问题描述
我曾尝试查看社区的其他解决方案,但没有任何帮助。
我只是试图将输入与数据库条目匹配,从而在“products.html”页面中显示结果。
如果有人能分解解决方案,将不胜感激。
视图.py
from django.shortcuts import render, redirect
from .forms import ProductForm
from .models import Product
def home(request):
form = ProductForm()
if request.method == "POST":
form = ProductForm(request.POST)
form.save()
if form.is_valid():
return redirect('/')
context = {
'form':form
}
return render(request, 'bye/home.html', context)
def products(request, pk):
product = Product.objects.get(id = pk)
if request.method == "POST":
return redirect('/')
context = {
'product': product
}
return render(request, 'bye/products.html', context)
网址.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.home, name ='home'),
path('products/<str:pk>/', views.products, name = 'products')
]
主页.html
</div>
<div class = "col-md-12"><a href = "{% url 'products' product.id %}" class="btn btn-info btn-sm">Submit</a></div>
</div>
产品.html
{% extends 'bye/base.html' %}
{% block content %}
<p></p>
{{product.name}}
{% endblock %}
追溯
Traceback (most recent call last):
File "D:\DJPROJ\try\env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "D:\DJPROJ\try\env\lib\site-packages\django\core\handlers\base.py", line 181, in _get_response
response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "D:\DJPROJ\try\okay\bye\views.py", line 17, in home
return render(request, 'bye/home.html', context)
File "D:\DJPROJ\try\env\lib\site-packages\django\shortcuts.py", line 19, in render
content = loader.render_to_string(template_name, context, request, using=using)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\loader.py", line 62, in render_to_string
return template.render(context, request)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\loader_tags.py", line 150, in render
return compiled_parent._render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\loader_tags.py", line 62, in render
result = block.nodelist.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "D:\DJPROJ\try\env\lib\site-packages\django\template\defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "D:\DJPROJ\try\env\lib\site-packages\django\urls\base.py", line 86, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "D:\DJPROJ\try\env\lib\site-packages\django\urls\resolvers.py", line 694, in _reverse_with_prefix
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'products' with arguments '('',)' not found. 1 pattern(s) tried: ['products/(?P<pk>[^/]+)/$']
[19/Jul/2021 23:10:45] "GET / HTTP/1.1" 500 155526
我无法弄清楚错误在哪里以及为什么。
解决方案
尝试这个:
#views.py
def products(request, **kwargs):
pk = kwargs.get("pk")
product = Product.objects.filter(id = pk)
if product.exists():
return redirect('/')
context = {
'product': product
}
return render(request, 'bye/products.html', context)
推荐阅读
- javascript - Java脚本WebSocket onopen事件未触发?
- html - 如何在我的幻灯片中消除点行之间的空间。我的行之间大约有 2.5 英寸。我有 120 张幻灯片,导致三排点
- android-studio - 当我使用 WebView for WhatsApp Web 时,您的浏览器不受支持 - Android Studio
- javascript - 从数组中添加相同的标题
- symfony5 - Symfony 5 Mercure 无法为“https://127.0.0.1:8000/.well-known/mercure”发送更新 SSL 连接错误
- timer - 为什么我们应该在 EJB 中使用 @Startup 进行定时器服务?
- json - 如何在 go 中打印 [][]interface{}?
- javascript - 如何使用一个 Jquery 函数来处理多个 onchange (HTML) 事件
- oracle - 如何将一个分区的数据从一个表及其子表(引用分区)移动到另一个表及其子表(引用分区)?
- python - 为什么我会收到 TypeError?