Моя ситуация такова, что у меня есть несколько модальностей (4, если быть точным), которые должны быть доступны при каждом просмотре в моем приложении. Я буду использовать только один в качестве примера. Давайте посмотрим, как я отображаю это на главном экране:
base. html
...abbreviated...
<a data-toggle="modal" href="#exampleModal">Shipment</buton>
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Create Shipment</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<form method="POST">
{% csrf_token %}
<div class="modal-body">
{{shipmentForm|crispy}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" name="shipment" class="btn btn-primary">Save changes</button>
</form>
</div>
</div>
</div>
</div>
А вот представление, которое передает shipmentForm
этому шаблону
views.py
def HomeView(request):
if request.method == 'POST':
shipment_form = CreateShipmentForm(request.POST)
if shipment_form.is_valid():
new_shipment = shipment_form.save()the user to the success page
return redirect('ShipmentListView')
shipmentForm = CreateShipmentForm()
context = {
'shipmentForm': shipmentForm,
}
return render(request, 'home.html', context)
Это прекрасно работает, но проблема в том, что мне нужно было бы включить этот код из HomeView в каждое представление моего приложения. Это было бы много раз повторяться. Я включил html для модального в мою базу. html, чтобы мне не пришлось повторять это. Но вместо того, что у меня есть выше, я хотел бы сделать кнопку, которая запускает модальный вид / сделать что-то вроде этого.
base. html
<a data-toggle="modal" href="{% url 'CreateShipmentView' %}>Shipment</buton>
Поместить html для модальной формы в отдельном файле:
, модальный. html
<!-- Modal -->
<div class="modal fade" id="exampleModal" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="exampleModalLabel">Create Shipment</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
<form method="POST">
{% csrf_token %}
<div class="modal-body">
{{shipmentForm|crispy}}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
<button type="submit" name="shipment" class="btn btn-primary">Save changes</button>
</form>
</div>
</div>
</div>
</div>
Тогда получится такой вид:
def CreateShipmentView(request):
if request.method == 'POST':
shipment_form = CreateShipmentForm(request.POST)
if shipment_form.is_valid():
new_shipment = shipment_form.save()the user to the success page
return redirect('ShipmentListView')
shipmentForm = CreateShipmentForm()
context = {
'shipmentForm': shipmentForm,
}
return render(request, 'modal.html', context)
Как это возможно без использования пакета django -modal- bootstrap? Я попробовал это, но это казалось очень обидным, и мне это не понравилось, поэтому я предпочел бы избежать этого. Может кто-нибудь указать мне, как я мог бы сделать эту работу, пожалуйста?