Открыть новый вид в Bootstrap Модальный в Django - PullRequest
0 голосов
/ 29 апреля 2020

Моя ситуация такова, что у меня есть несколько модальностей (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">&times;</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">&times;</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? Я попробовал это, но это казалось очень обидным, и мне это не понравилось, поэтому я предпочел бы избежать этого. Может кто-нибудь указать мне, как я мог бы сделать эту работу, пожалуйста?

...