无法访问 Django 结帐:找不到页面 (404) [英] Django checkout not accessible: Page not found (404)

查看:33
本文介绍了无法访问 Django 结帐:找不到页面 (404)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

<块引用>

找不到页面 (404)

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

有什么问题?

我的views.py:

@login_required定义结帐(请求):address_form = UserAddressForm(request.POST or None)如果 address_form.is_valid():new_address = address_form.save(commit= False)new_address.user = request.usernew_address.save()别的:提高Http404打印(表单错误)上下文 = {address_form":address_form}模板 = "订单/checkout.html"返回渲染(请求,模板,上下文)

我的 checkout.html:

{% csrf_token %}<fieldset class="form-group">{{ address_form|脆皮}}</fieldset><div class="form-group"><input type="submit" class="btn btn-outline-dark" value="下单"/>

</表单>

我的 urls.py:

from orders 将视图导入为 orders_viewspath('checkout/', orders_views.checkout, name='checkout'),

解决方案

您错误地实现了 GET 请求处理,参考 这个例子 来自文档.在您的情况下,表单总是无效的,因为在 GET 请求的情况下,它被初始化为 none.但是,您甚至不必在 GET 请求中验证空表单.

您的代码已更新:

@login_required定义结帐(请求):如果 request.method == 'POST':address_form = UserAddressForm(request.POST)如果 address_form.is_valid():new_address = address_form.save(commit= False)new_address.user = request.usernew_address.save()return # TODO : 返回什么?别的:# 否则(如果 GET 请求)我们到这里address_form = UserAddressForm()上下文 = {address_form":address_form}返回渲染(请求,订单/checkout.html",上下文)

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

I'm trying to develop an e-commerce site with Django. So I'm at this point where, users can add items to their cart, but when I try to proceed to checkout, for some reason, my checkout form is not displayed rather, it says:

Page not found (404)

I made sure that I have registered my models, and ran migrations.

What is the problem?

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

My 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>

My urls.py:

from orders import views as orders_views
path('checkout/', orders_views.checkout, name='checkout'),

解决方案

You've implemented GET request handling incorrectly, for reference see this example from the docs. In your case form was always invalid because in case of GET request it was initialized with none. However you don't even have to validate empty form on GET request.

Your code updated:

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

And you need to specify what is supposed to happen when the form is valid: redirect for example.

这篇关于无法访问 Django 结帐:找不到页面 (404)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆