【问题标题】:Django error with get_absolute_urlget_absolute_url 的 Django 错误
【发布时间】:2015-08-08 21:08:41
【问题描述】:

我正在从事 django 电子商务项目。将任何其他 url 添加到我的 html 页面 single.html(显示特定面包师或制造商的产品)会产生错误 HTTP404。 所以在这个single.html 页面上显示产品。我添加了添加到购物车按钮。当我没有在按钮标签中提到 add_to_cart 的链接时,它会显示页面,当我提到它时会给出 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'),   

【问题讨论】:

    标签: python django django-models django-views django-urls


    【解决方案1】:

    您需要将 slug 传递给 url 标签,告诉它您要添加哪个元素。

    {% url 'add_to_cart' slug=items.slug %}
    

    (请注意,如果您将变量称为“item”而不是“items”会更清楚)。

    【讨论】:

      【解决方案2】:

      这不是在回答您的问题,但这些问题困扰着我!更严重的是,这些小细节加起来会让你的工作更加努力。

      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
          })
      

      【讨论】:

      • 谢谢@Francois。有效。我会按照你说的做出改变。
      猜你喜欢
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      • 1970-01-01
      • 2014-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多