无法访问 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)
并且您需要指定当表单有效时应该发生的事情:例如重定向。
我正在尝试使用 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)
并且您需要指定当表单有效时应该发生的事情:例如重定向。