python - 如何将锚标签 ID 传递给 Django 中的 url?
问题描述
我正在尝试为披萨订购网站构建“添加到购物车”功能。为此,我设置了锚标记,我需要将特定的项目 ID 从锚标记发送到视图函数,以便可以将项目添加到购物车。我收到一个 TypeError 代码,上面写着“add_to_cart() 缺少 1 个必需的位置参数:'item_id'”。我相信这是因为 item.id 变量没有被传递给 urls.py。有谁知道解决这个问题的正确方法?我正在使用 Django 3.0.8,所以我不知道 RegEx 是否可以工作。提前致谢!
网址.py:
from django.urls import path, include
from django.contrib import admin
from django.contrib.auth.forms import UserCreationForm
from . import views
from users import views as users_views
urlpatterns = [
path('', views.index, name="index"),
path('admin/', admin.site.urls),
path('login/', views.login_view, name="login"),
path('logout/', views.logout_view, name = "logout"),
path('register/', users_views.register_view, name = "register"),
path('menu/', views.menu, name = "menu"),
path('cart/', views.add_to_cart, name = "add_to_cart"),
path('cart/<int:item_id>', views.add_to_cart, name = "add_to_cart")
]
视图.py:
def add_to_cart(request, item_id):
#query database for the correct item
order_id = Pizza.objects.get(id = item_id)
#add the new order to the cart
new_item = Cart.objects.create(order_id)
#test connection
return render(request, "orders/homepage.html")
html模板:
{% extends "orders/base.html" %}
{% block body %}
<h2>Pizza Menu</h2>
<form action="{% url 'add_to_cart' %}" method="post">
{% csrf_token %}
<table>
<tbody>
<thead>
Regulars
</thead>
{% for item in pizza %}
<tr>
<td> {{ item.item }}, {{ item.toppings }}, Price: {{ item.price }}</td>
<td>
<a href="{% url 'add_to_cart' item.id %}" data-id = "{{ item.id }}" id = "{{ item.id }}"><button type="info" name="item">Add to Cart</button></a>
</td>
</tr>
</tbody>
{% endfor %}
</table>
</form>
<!--
<table>
{% for item in regular_pizza %}
<ul>
<li>
{{ item }}
</li>
</ul>
{% endfor %}
{% for item in sicilian_pizza %}
<ul>
<li>
{{ item }}
</li>
</ul>
{% endfor %}
</table> -->
</div>
{% endblock %}
再次感谢任何可以提供帮助的人!
解决方案
您正在重新定义此视图:
path('cart/', views.add_to_cart, name = "add_to_cart"),
path('cart/<int:item_id>', views.add_to_cart, name = "add_to_cart")
删除第一个,并item_id
使用正则表达式使其成为可选,因此您只需:
path('cart/(?P<item_id>[0-9]*)', views.add_to_cart, name = "add_to_cart")
然后,因为item_id
是可选的:
def add_to_cart(request, item_id=None):
推荐阅读
- python - 使用 Python 3.7 的异步 for 循环创建粗略的 bogo_sort
- android - 为什么我现在的App没有界面?
- javascript - 如何在 b-form-input 中显示默认值?在 Vue 中
- typescript - 根据 TypeScript 中的参数动态生成返回类型
- android - 我在 firebase 控制台中看不到 android 的崩溃报告
- camera-calibration - 使用 HALCON 进行 3D 三角测量
- visual-studio-code - 在 VSCode 上美化 c++ 文件
- ruby-on-rails - OmniAuth::Strategies::OAuth2::CallbackError 发生
- javascript - Fullcalendar - 固定宽度事件:左对齐
- python - 如何仅获取父类对象的属性