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

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

问题描述

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


找不到页面(404)


我确保已注册我的模型,然后进行迁移。



出了什么问题?



我的views.py:

  @login_required 
def checkout(request):
address_form = UserAddressForm(request.POST或None)
如果address_form.is_valid():
new_address = address_form.save(commit = False)
new_address.user = request.user
new_address.save()
else:
提高Http404
print(form.errors)
context = { address_form:address_form}
template = orders / checkout.html
return render(request,template,上下文)

我的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 =下订单 />
< / div>
< / form>

我的urls.py:

 从订单中将视图导入为orders_views 
路径('checkout /',orders_views.checkout,name ='checkout'),


解决方案

您错误地实现了 GET 请求处理,请参阅从文档中此示例。在您的情况下,表单始终无效,因为在 GET 请求的情况下,该表单没有初始化。但是,您甚至不必在GET请求中验证空白表格。



您的代码已更新:

  @login_required 
def checkout(request):
if request.method =='POST':
address_form = UserAddressForm(request.POST)
如果address_form.is_valid():
new_address = address_form.save(commit = False)
new_address.user = request.user
new_address.save()
return#TODO:返回什么?
else:
#否则(如果有GET请求),我们在这里
address_form = UserAddressForm()

context = { address_form:address_form}
返回render(request, orders / 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天全站免登陆