NoReverseMatch at / Reverse for 'singlepropa' with arguments '('mens-shirt-1',)' not found.尝试了 1 种模式
NoReverseMatch at / Reverse for 'singlepropa' with arguments '('mens-shirt-1',)' not found. 1 pattern(s) tried
我正在尝试将 2 个参数从 html 标记传递到 django 中的 urls。但我收到错误: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, *args, **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, 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 62, in render
result = block.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\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 905, in render_annotated
return self.render(context) …
▶ Local vars
G:\djangoPro\EMart\venv\lib\site-packages\django\template\defaulttags.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, *args, **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 个参数 product slug。问题出在 singlepropa URL.
<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
我正在尝试将 2 个参数从 html 标记传递到 django 中的 urls。但我收到错误: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, *args, **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, 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 62, in render
result = block.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\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 905, in render_annotated
return self.render(context) …
▶ Local vars
G:\djangoPro\EMart\venv\lib\site-packages\django\template\defaulttags.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, *args, **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 个参数 product slug。问题出在 singlepropa URL.
<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