如何解决NoReverseMatch at / Reverse for 'singlepropa' 未找到参数 '('mens-shirt-1',)'尝试了 1 个模式
我试图将 html 标签中的 2 个参数传递给 django 中的 url。但我收到错误:noreverseMatch。如果我只传递一个参数,那么它工作正常,但是每当我传递 2 个参数时就会产生错误。我已经阅读了这方面的文档,但我不清楚,我也搜索过这个问题。但没有任何效果。你能帮我弄清楚我该如何解决这个问题吗?
我在 html 标签中的 href 是:
<a href='{% url "update_cart" slug=product.slug qty=10 %}' class="float-right">Add to Cart</a>Add to Cart</a>
我的 urls.py 是:
urlpatterns = [
path('',home.Index.as_view(),name='homepage'),path('signup',signup.SignUp.as_view(),name="signup"),path('login',login.Login.as_view(),name="login"),path('logout',login.logout,name="logout"),path('basket',basket.Basket.as_view(),name="basket"),path('singlepropa/<str:slug>/<int:qty>',singlepropa.SinglePropa.as_view(),name="singlepropa"),path('s/',search.Search.as_view(),name="search"),path('update_cart/<str:slug>/<int:qty>',basket.update_cart,name="update_cart"),]
映射url的方法是:
from django.shortcuts import render,redirect,HttpResponseRedirect
from django.views import View
from MStore.models.cartModel import Cart,CartItem
from MStore.models.productModel import ProductModel
from django.urls import reverse
# login class
class Basket(View):
def get(self,request):
try:
the_id = request.session["cart_id"]
except:
the_id = None
if the_id:
cart = Cart.objects.get(id=the_id)
context = {'cart': cart}
else:
empty_msg = "Your Cart is empty. Please keep shopping!"
context = {"empty": True,"empty_msg": empty_msg }
return render(request,'basket.html',context)
def update_cart(request,slug,qty):
try:
the_id = request.session["cart_id"]
except:
new_cart = Cart()
new_cart.save()
the_id = new_cart.id
request.session["cart_id"] = new_cart.id
cart = Cart.objects.get(id=the_id)
try:
product = ProductModel.objects.get(slug=slug)
except ProductModel.DoesNotExist:
pass
except:
pass
cart_item,created = CartItem.objects.get_or_create(cart=cart,product=product)
if created:
print("Yeah")
if qty == 0:
cart_item.delete()
else:
cart_item.quantity = qty
cart_item.save()
request.session["item_counts"] = cart.cartitem_set.count()
new_total = 0.00
for p in cart.cartitem_set.all():
line_total = float(p.product.price) * p.quantity
new_total += line_total
cart.total = round(new_total,2)
cart.save()
return HttpResponseRedirect(reverse("basket"))
我得到的错误:
noreverseMatch at /
> Reverse for 'singlepropa' with arguments '('mens-shirt-1',)' not found. 1 pattern(s) tried:
> ['singlepropa/(?P<slug>[^/]+)/(?P<qty>[0-9]+)$']
> Request Method: GET
> Request URL: http://127.0.0.1:8000/
> Django Version: 3.1.5
> Exception Type: noreverseMatch
> Exception Value:
> Reverse for 'singlepropa' with arguments '('mens-shirt-1',)' not found. 1 pattern(s) tried:
> ['singlepropa/(?P<slug>[^/]+)/(?P<qty>[0-9]+)$']
> Exception Location: G:\djangopro\EMart\venv\lib\site-packages\django\urls\resolvers.py,> line 685,in _reverse_with_prefix
> Python Executable: G:\djangopro\EMart\venv\Scripts\python.exe
> Python Version: 3.7.3
> Python Path:
> ['G:\\djangopro\\NShopping',> 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\python37-32\\python37.zip',> 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\python37-32\\DLLs',> 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\python37-32\\lib',> 'C:\\Users\\User\\AppData\\Local\\Programs\\Python\\python37-32',> 'G:\\djangopro\\EMart\\venv',> 'G:\\djangopro\\EMart\\venv\\lib\\site-packages']
> Server time: Wed,10 Feb 2021 09:16:40 +0000
完整追溯:
G:\djangopro\EMart\venv\lib\site-packages\django\core\handlers\exception.py,line 47,in inner
response = get_response(request) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\core\handlers\base.py,line 181,in _get_response
response = wrapped_callback(request,*callback_args,**callback_kwargs) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\views\generic\base.py,line 70,in view
return self.dispatch(request,*args,**kwargs) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\views\generic\base.py,line 98,in dispatch
return handler(request,**kwargs) …
▶ Local vars
G:\djangopro\NShopping\MStore\views\home.py,line 24,in get
return render(request,'index.html',data) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\shortcuts.py,line 19,in render
content = loader.render_to_string(template_name,context,request,using=using) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\loader.py,line 62,in render_to_string
return template.render(context,request) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\backends\django.py,line 61,in render
return self.template.render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,line 170,in render
return self._render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,line 162,in _render
return self.nodelist.render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,line 938,in render
bit = node.render_annotated(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,line 905,in render_annotated
return self.render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\loader_tags.py,line 150,in render
return compiled_parent._render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,in render
result = block.nodelist.render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,in render_annotated
return self.render(context) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\defaulttags.py,line 211,in render
nodelist.append(node.render_annotated(context)) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\template\base.py,line 446,in render
url = reverse(view_name,args=args,kwargs=kwargs,current_app=current_app) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\urls\base.py,line 87,in reverse
return iri_to_uri(resolver._reverse_with_prefix(view,prefix,**kwargs)) …
▶ Local vars
G:\djangopro\EMart\venv\lib\site-packages\django\urls\resolvers.py,line 685,in _reverse_with_prefix
raise noreverseMatch(msg)
解决方法
update_cart 只有 1 个参数产品 slug。问题出在 singlepropa 网址中。
<a href='{% url "update_cart" product.slug %}' class="float-right">Add to Cart</a>
<a href='{% url "singlepropa" product.slug 10 %}' class="float-right">Add to Cart</a>
这将解决您的问题。
https://docs.djangoproject.com/en/3.1/ref/templates/builtins/#url
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。