get_absolute_url 的 Django 错误
Django error with get_absolute_url
我在 django 电子商务项目工作。将任何其他 url 添加到我的 html 页面 single.html(显示特定面包师或制造商的产品)会出现 HTTP404 错误。
所以在这个 single.html 页面上显示了产品。我添加了添加到购物车按钮。当我在按钮标签中没有提到 add_to_cart 的 link 时,它会显示页面,当我提到它时给出 HTTP404 错误
views.py 用于显示制造商(在我的例子中是面包师)
def BakerDetail(request, slug):
try:
baker = Baker.objects.get(slug=slug)
products = Product.objects.filter(baker=baker)
context = {
'baker': baker,
'products': products
}
template = 'bakers/single.html'
return render(request, template, context)
except:
raise Http404
single.html
<table class='table'>
<thead>
<th></th>
<th>Products</th>
</thead>
<tbody>
{% for items in products %}
<tr>
<td></td>
<td>
<a href="{{ items }}">
{{ items }}</a>
{{ items.price }}
<button class="btn btn-primary" href="{% url 'add_to_cart' %}">Add To Cart</button>
</td>
<td></td>
</tr>
{% endfor %}
</tbody>
</table>
查看 add_to_cart
def Add_To_Cart(request, slug):
request.session.set_expiry(120000)
try:
the_id = request.session['cart_id']
except:
new_cart = Cart()
new_cart.save()
request.session['cart_id'] = new_cart.id
the_id = new_cart.id
cart = Cart.objects.get(id=the_id)
try:
product = Product.objects.get(slug=slug)
except Product.DoesNotExist:
pass
except:
pass
urls.py
url(r'^cart/(?P<slug>[\w-]+)/$', views.Add_To_Cart, name='add_to_cart'),
您需要将 slug 传递到 url
标记中,以告诉它您要添加哪个元素。
{% url 'add_to_cart' slug=items.slug %}
(请注意,如果您将变量称为"item",而不是"items",会更清楚)。
这不是在回答您的问题,而是这些问题困扰着我!更严重的是,这些小细节加起来会让你的工作更加努力。
def BakerDetail(...)
=> def baker_detail(...)
def Add_To_Cart(...)
=> def add_to_car(...)
try: baker = Baker.objects.get(slug=slug) ... except ...
=> baker = get_object_or_404(Baker, slug=slug)
参见:https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#get-object-or-404
{% for items in products %}
=> {% for item in products %}
为了清楚起见,您的视图可能如下所示(行为相同):
def baker_detail(request, slug):
baker = get_object_or_404(Baker, slug=slug)
products = Product.objects.filter(baker=baker)
return render(request, 'bakers/single.html', {
'baker': baker,
'products': products
})
我在 django 电子商务项目工作。将任何其他 url 添加到我的 html 页面 single.html(显示特定面包师或制造商的产品)会出现 HTTP404 错误。 所以在这个 single.html 页面上显示了产品。我添加了添加到购物车按钮。当我在按钮标签中没有提到 add_to_cart 的 link 时,它会显示页面,当我提到它时给出 HTTP404 错误
views.py 用于显示制造商(在我的例子中是面包师)
def BakerDetail(request, slug):
try:
baker = Baker.objects.get(slug=slug)
products = Product.objects.filter(baker=baker)
context = {
'baker': baker,
'products': products
}
template = 'bakers/single.html'
return render(request, template, context)
except:
raise Http404
single.html
<table class='table'>
<thead>
<th></th>
<th>Products</th>
</thead>
<tbody>
{% for items in products %}
<tr>
<td></td>
<td>
<a href="{{ items }}">
{{ items }}</a>
{{ items.price }}
<button class="btn btn-primary" href="{% url 'add_to_cart' %}">Add To Cart</button>
</td>
<td></td>
</tr>
{% endfor %}
</tbody>
</table>
查看 add_to_cart
def Add_To_Cart(request, slug):
request.session.set_expiry(120000)
try:
the_id = request.session['cart_id']
except:
new_cart = Cart()
new_cart.save()
request.session['cart_id'] = new_cart.id
the_id = new_cart.id
cart = Cart.objects.get(id=the_id)
try:
product = Product.objects.get(slug=slug)
except Product.DoesNotExist:
pass
except:
pass
urls.py
url(r'^cart/(?P<slug>[\w-]+)/$', views.Add_To_Cart, name='add_to_cart'),
您需要将 slug 传递到 url
标记中,以告诉它您要添加哪个元素。
{% url 'add_to_cart' slug=items.slug %}
(请注意,如果您将变量称为"item",而不是"items",会更清楚)。
这不是在回答您的问题,而是这些问题困扰着我!更严重的是,这些小细节加起来会让你的工作更加努力。
def BakerDetail(...)
=> def baker_detail(...)
def Add_To_Cart(...)
=> def add_to_car(...)
try: baker = Baker.objects.get(slug=slug) ... except ...
=> baker = get_object_or_404(Baker, slug=slug)
参见:https://docs.djangoproject.com/en/1.8/topics/http/shortcuts/#get-object-or-404
{% for items in products %}
=> {% for item in products %}
为了清楚起见,您的视图可能如下所示(行为相同):
def baker_detail(request, slug):
baker = get_object_or_404(Baker, slug=slug)
products = Product.objects.filter(baker=baker)
return render(request, 'bakers/single.html', {
'baker': baker,
'products': products
})