无法访问 Django 结帐:找不到页面 (404) [英] Django checkout not accessible: Page not found (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:
</表单>
我的 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屋!