无法访问Django结帐:找不到页面(404)

问题描述 投票:0回答:1

[嗨,我正在尝试使用Django开发一个电子商务网站。所以我现在在这里,用户可以将商品添加到他们的购物车中,但是由于某种原因,当我尝试进行结帐时,我的结帐表格并未显示,而是说:

找不到页面(404)

我确保已注册我的模型,并运行了迁移。

是什么问题?谁能帮我吗?

我的views.py:

@login_required
def checkout(request):
    address_form = UserAddressForm(request.POST or None)
    if address_form.is_valid():
        new_address = address_form.save(commit= False)
        new_address.user = request.user
        new_address.save()
    else:
        raise Http404
        print(form.errors)
    context = {"address_form": address_form}
    template = "orders/checkout.html"
    return render(request, template, context)

我的checkout.html:

<form method="POST" action=''>
    {% csrf_token %}
    <fieldset class="form-group">   
        {{ address_form|crispy }}
    </fieldset>
    <div class="form-group">
        <input type="submit" class="btn btn-outline-dark" value="Place Order"/>
    </div>
</form>

我的urls.py:

from orders import views as orders_views
path('checkout/', orders_views.checkout, name='checkout'),
python django django-forms django-urls
1个回答
0
投票

您实施的GET请求处理不正确,以供参考,请参阅文档中的this example。在您的情况下,表单始终无效,因为在GET请求的情况下,该表单没有任何初始化。但是,您甚至不必验证GET请求中的空白表格。

您的代码已更新:

@login_required
def checkout(request):
    if request.method == 'POST':
        address_form = UserAddressForm(request.POST)
        if address_form.is_valid():
            new_address = address_form.save(commit= False)
            new_address.user = request.user
            new_address.save()
            return # TODO : return what?
    else:
        # otherwise (if GET request) we get here
        address_form = UserAddressForm()

    context = {"address_form": address_form}
    return render(request, "orders/checkout.html", context)

并且您需要指定表单有效时应该发生的事情:例如重定向。

© www.soinside.com 2019 - 2024. All rights reserved.