我有一个链接到预订页面的旅游页面,我已经对其进行了设置,因此它将旅游号码作为 URL 参数“旅游”发送到预订页面。然后我想在页面上显示旅游标题并将 URL 参数添加到预订表格中,然后将通过电子邮件向我发送参与者详细信息和旅游编号。但是,当我发布表单时,表单输入值“数字”会被重置。如何确保“号码”不会重置?目前,当我发布表单时,我只得到“数字”的 None 值。
tourpage.html
<div class="text-center">
<a href="/booking/?tour=1" class="btn btn-primary text-center fs-2">Book This Tour Now</a>
</div>
预订.html
<p class="fs-3">Booking: {{title}}</p>
<main>
<div class="col-12">
<form class='contact-form' method='POST' action='/booking/'> {% csrf_token %}
<input type="hidden" id="g-recaptcha-response" name="g-recaptcha-response">
<input type="hidden" id="number" value={{tournumber}}>
<div class="row g-3">
{% for field in form %}
{% if forloop.last %}
<div class="col-12">
{{ field.label_tag }}
{{ field }}
{% else %}
<div class="col-sm-6">
{{ field.label_tag }}
{{ field }}
{% endif %}
</div>
{% endfor %}
<button class="w-100 btn btn-primary btn-lg" type="submit">Submit</button>
</form>
</div>
<p>Alternatively you can always reach us on <img src="{% static 'email_image.png' %}" width="300" height="22"></p>
</div>
</main>
<script>
//global grecaptcha
grecaptcha.ready(function() {
grecaptcha.execute('{{recaptcha_site_key}}', {action: "/booking/"}).then(function(token) {
document.getElementById('g-recaptcha-response').value = token;
});
});
</script>
视图.py
def booking(request):
contact_form = CheckoutForm(request.POST or None)
try:
tour = request.GET['tour']
except:
title = "No tour selected"
#initiate tournumber value
tournumber = 0
if int(tour) == 1:
title = "Full Day Tour"
tournumber = 1
else:
title = "No tour selected"
# Enquiry FORM
if request.method == "POST":
if contact_form.is_valid():
''' reCAPTCHA validation '''
recaptcha_response = request.POST.get('g-recaptcha-response')
data = {
'secret': settings.GOOGLE_RECAPTCHA_SECRET_KEY,
'response': recaptcha_response
}
r = requests.post('https://www.google.com/recaptcha/api/siteverify', data=data)
result = r.json()
#print(result)
''' if reCAPTCHA returns True '''
if result['success']:
''' Send email '''
number = request.POST.get('number')
first_name = contact_form.cleaned_data['first_name']
last_name = contact_form.cleaned_data['last_name']
first_name = first_name.lower().title()
last_name = last_name.lower().title()
email = contact_form.cleaned_data['email']
group_size = contact_form.cleaned_data['group_size']
country = contact_form.cleaned_data['country']
travel_dates = contact_form.cleaned_data['travel_dates']
subject = contact_form.cleaned_data['enquiry']
if request.user.is_authenticated:
customer = request.user.customer
customer = customer.name
else:
name = first_name + ' ' + last_name
customer, created = Customer.objects.get_or_create(email=email,)
customer.name = name
customer.save()
#admin email
#removed sensitive info for stackoverflow
sendAdminEmail.fail_silently=False
sendAdminEmail.send()
#customer email
#removed sensitive info for stackoverflow
sentemail.fail_silently=False
sentemail.send()
else:
''' if reCAPTCHA returns False '''
messages.error(request, 'Google Captcha error.')
if contact_form.errors:
errors = contact_form.errors.as_json()
if request.is_ajax():
return HttpResponse(errors, status=400, content_type='application/json')
context = {"title": title, "tournumber": tournumber, "form": contact_form, 'recaptcha_site_key':settings.GOOGLE_RECAPTCHA_SITE_KEY}
return render(request, 'booking.html', context)