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

Django checkout not accessible: Page not found (404)

我正在尝试使用 Django 开发一个电子商务网站。所以我在这一点上,用户可以将项目添加到他们的购物车,但是当我尝试继续结帐时,出于某种原因,我的结帐表单没有显示,而是显示:

Page not found (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'),

您实施的 GET 请求处理不正确,参考文档中的 this example。在您的案例中,表单总是无效的,因为在 GET 请求的情况下,它是用 none 初始化的。但是,您甚至不必根据 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)

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