2

URLconfで奇妙なエラーが発生します。

次の設定があります。

# root conf
urlpatterns = patterns('',
    # ...
    url(r'^cart/', include('bbhq.cart.urls')),
    # ...
)

# bbhq.cart.urls
urlpatterns = patterns('',
    # ...
    url(r'^add_to_cart$', add_to_cart, name='add-to-cart-page'),
    # ...
)

逆関数を使用するフォームがあります(正常に)

<form method="post" action="{% url add-to-cart-page %}">

ただし、フォームを送信すると404ページが見つかりません。

ここで何が起こっているのか理解できません。逆関数はどのように機能しますが、実際のURLに404を与えますか?

関連性があるかどうかはわかりませんが、404のデバッグ情報には、これらの状況でよく見られるように、検索された正規表現のリストが表示されません。これが私が得るすべてです-

Page not found (404)
Request Method: POST
Request URL:    http://192.168.1.98:8000/cart/add_to_cart

私のビューコードは-

def add_to_cart(request):
    if request.method == 'POST':
        if 'cart' in request.session:
            cart = request.session['cart']
        else:
            cart = Cart()
        if 'item_id' not in request.POST:
            raise Http404
        else:
            try:
                item = StockItem.objects.get(pk=int(request.POST['item_id']))
            except:
                raise Http404
            cart_add(cart, item)
            request.session.modified = True
        if request.is_ajax():
            return render_to_response('cart/cart_summary.html',
                                      {'cart_count': cart_items(cart),
                                       'cart_total': cart_total(cart)},
                            context_instance=RequestContext(request))
        else:
            return HttpResponseRedirect(reverse('cart-page'))
    else:
        raise PermissionDenied

URLにスラッシュを追加しようとしましたが、まったく同じエラーが発生します-

url(r'^add_to_cart/$', add_to_cart, name='add-to-cart-page'),
4

1 に答える 1

1

標準の404(スタックトレースのないもの)を受け取った場合、通常はそれが実行されたことを意味しますraise Http404()代わりにメッセージリダイレクトを使用して、ユーザーと自分自身の作業を少し簡単にすることをお勧めします。

def add_to_cart(request):
    if request.method == 'POST':
        if 'cart' in request.session:
            cart = request.session['cart']
        else:
            cart = Cart()
        if 'item_id' not in request.POST:
            '''
            HERE BE CHANGES
            '''
            # The id was not supplied
            messages.error(request, 'No item was provided')
            return HttpResponseRedirect(request.META['HTTP_REFERER'])
        else:
            try:
                item = StockItem.objects.get(pk=int(request.POST['item_id']))
            except:
                '''
                HERE BE CHANGES
                '''
                # The item was not found in the database
                messages.error(request, 'Unable to find the specified item.'
                return HttpResponseRedirect(request.META['HTTP_REFERER'])
            cart_add(cart, item)
            request.session.modified = True
        if request.is_ajax():
            return render_to_response('cart/cart_summary.html',
                                      {'cart_count': cart_items(cart),
                                       'cart_total': cart_total(cart)},
                            context_instance=RequestContext(request))
        else:
            return HttpResponseRedirect(reverse('cart-page'))
    else:
        raise PermissionDenied
于 2012-12-11T18:50:03.863 に答える