我有一个主页(OnlinePricing.html)作为用户输入一些信息的表单。输入一些需要的信息后,如果用户点击“获取Pice”按钮,价格将显示在底部页面(这里我使用htmx部分刷新主页)。
如果用户单击“立即订购”按钮,则需要重定向到路径为“homepage/order/”的名为 CreateOrder.html 的新页面,其中价格将显示在此新页面中。
以下是完整代码。当前的问题与veiws.py中CreateOrder的功能有关。当点击“立即订购”时,页面重定向但有一些错误信息:
NoReverseMatch at /order/
Reverse for 'CreateOrder' with keyword arguments '{'kwargs': {'pickup_address': 'xxx', 'delivery_address': 'xxx', 'distance': xxx, 'charge': xxx}}' not found. 1 pattern(s) tried: ['order\\/\\Z']
#views.py
def OnlinePricing(request):
result = 0
pickup_date = ""
pickup_address = ""
delivery_address = ""
weight = 0
volume = 0
height = 0
stack = ""
FTL = ""
time_window = ""
dist = ""
charge = ""
navi_load = ""
navi_unload = ""
error_message = ""
try:
if request.method == "POST":
# print("REQUEST ", request.POST)
pickup_date = request.POST.get('pickup_date')
pickup_address = request.POST.get('pickup_address')
delivery_address = request.POST.get('delivery_address')
weight = float(request.POST.get('weight'))
volume = float(request.POST.get('volume'))
height = float(request.POST.get('height'))
stack = request.POST.get('stack')
FTL = request.POST.get('ftl')
time_window = request.POST.get('time_window')
charge, dist, navi_load, navi_unload, error_message = pricing(pickup_address, delivery_address, weight, volume, height, stack, FTL, time_window)
request.session['navi_load'] = navi_load
request.session['navi_unload'] = navi_unload
request.session['dist'] = dist
request.session['charge'] = charge
if error_message != "":
charge = error_message
print("charge: ", charge, " dist: ", dist, " date: ", pickup_date)
if request.headers.get('Hx-Request') == 'true':
# return only the result to be replaced
# return HttpResponse(str(result))
# return HttpResponse(str(dist),str(charge))
return render(request, 'OnlinePricing/CreateOrder.html', { 'pickup_address': navi_load,
'delivery_address': navi_unload,
'distance': dist, 'charge': charge})
else:
# return render(request, 'OnlinePricing/OnlinePricing.html', {'result': result})
return render(request, 'OnlinePricing/OnlinePricing.html', { 'pickup_address': navi_load,
'delivery_address': navi_unload,
'distance': dist, 'charge': charge})
except:
charge = "wrong input! "
return render(request, 'OnlinePricing/OnlinePricing.html', { 'pickup_address': navi_load,
'delivery_address': navi_unload,
'distance': dist, 'charge': charge})
def CreateOrder(request):
navi_load = request.session['navi_load']
navi_unload = request.session['navi_unload']
dist = request.session['dist']
charge = request.session['charge']
# return render(request, 'OnlinePricing/CreateOrder.html', {'pickup_address': navi_load,
# 'delivery_address': navi_unload,
# 'distance': dist, 'charge': charge})
return redirect('CreateOrder', kwargs={'pickup_address': navi_load,
'delivery_address': navi_unload,
'distance': dist, 'charge': charge})
#urls.py
urlpatterns = [
path('', views.OnlinePricing, name='OnlinePricing'),
path('order/', views.CreateOrder, name='CreateOrder'),
]
#主页 HTML
<form method="POST" hx-post="{% url 'OnlinePricing' %}" hx-target="#pickup_address"
hx-target="#delivery_address" hx-target="#distance" hx-target="#charge" @submit.prevent>
{% csrf_token %}
<div>
<label for="s1">pickup_address:</label>
<input type="text" name="pickup_address" value="" required="required" />
<br /><br />
</div>
<div>
<label for='s1'>delivery_address:</label>
<input type="text" name="delivery_address" value="" required="required" />
<br /><br />
</div>
...
<div>
<span id="pickup_address"> {{ pickup_address }} </span>
</div>
<div>
<span id="delivery_address"> {{ delivery_address }} </span>
</div>
<div>
<span id="distance"> {{ distance }} </span>
</div>
<div>
<span id="charge" > {{ charge }} </span>
</div>
<button type="submit">Get Price</button> <button type="submit" style="margin-left:10px;">Order Now</button>
</form>
#CreateOrder.html
<div>
<label>pickup_address:</label>
<span id="pickup_address"> {{ pickup_address }} </span>
</div>
<div>
<label>delivery_address:</label>
<span id="delivery_address"> {{ delivery_address }} </span>
</div>
<div>
<label>dist:</label>
<span id="distance"> {{ distance }} </span>
</div>
<div>
<label>charge:</label>
<span id="charge" style="color: #ff0000;font-size:25px"><b>{{ charge }}</b></span>
</div>
</html>
我的网站\urls.py
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('OnlinePricing.urls'))
# path('', include(('OnlinePricing.urls','OnlinePricing'),namespace='OnlinePricing'))
]