Django создать форму с материализацией модальных - PullRequest
0 голосов
/ 05 мая 2018

Насколько я пытался, я не могу получить данные формы или отправить их в функцию просмотра django через модализацию cize materialize. Я просто новичок в JS, AJAX и связанных с ним.
Действие «CreateView» для моей формы выполняется снаружи, но оно должно быть внутри модального режима и при этом использовать преимущества проверки формы django, безопасности и т. Д. Я использую Django версии 1.11.
В проекте есть два приложения: основное, которое загружает главную страницу, и библиотека, которая выполняет действия с объектами книги. Книга имеет только заголовок, поэтому существует форма, определенная как:

библиотека / forms.py

from django import forms
from .models import Book

class BookForm(forms.ModelForm):
    class Meta:
        model = Book
        fields = [
            'title', 
        ]

определение URL проекта, mysite / urls.py :

from django.conf.urls import url, include
from django.contrib import admin
from main import views as main_views

urlpatterns = [
    url(r'^$', main_views.home, name='home'),
    url(r'^books/', include('library.urls')),
    url(r'^admin/', admin.site.urls),
]

Домашний вид, main / views.py :

from django.shortcuts import render

def home(request):
    return render(request, 'main/home.html')

Основные / шаблоны / главная / home.html

<html>
  <head>
    <title>A library</title>
    <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/css/materialize.min.css">
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    </head>
  <body>
    {% block body %}
    <div class="container">
      <!--a class="waves-effect waves-light btn modal-trigger" href="#modal1">Create Book</a-->
      <a class="waves-effect waves-light btn modal-trigger" data-target="add_book_modal" href="{% url 'books:create' %}">
        Create Book
      </a>
      <div class="divider"></div>
        <div class="section">
          <h5>Section 1</h5>
          <p>Stuff</p>
        </div>
      </div>
    {% endblock %}

    {% include 'library/book_form.html' %}

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0-beta/js/materialize.min.js"></script>
    <script>
    $( document ).ready(function() {
      $('.modal').modal();
    });
    </script>
  </body>
</html>

URL-адреса библиотеки, library / urls.py:

from django.conf.urls import url
from .views import BookCreateView
app_name='books'

urlpatterns = [
    url(r'^create/$', BookCreateView.as_view(),  name='create'),
]

библиотека / views.py

from django.shortcuts import render
from django.views.generic import CreateView
from django.urls import reverse_lazy

from .models import Book
from .forms import BookForm

class BookCreateView(CreateView):
    form_class = BookForm
    template_name = 'library/book_form.html' 
    success_url = reverse_lazy('home')

библиотека / шаблоны / библиотека / book_form.html

<div id="add_book_modal" class="modal">
  <div class="modal-content">
  {% block body %}
    <main>
    <h5>Add book information</h5>
    {% if form.errors.non_field_errors %}
      {{ form.errors.non_field_errors }}
    {% endif %}
    <form method="POST">
      {% csrf_token %}
      {{ form.non_field_errors }}
      {{ form.source.errors }}
      {{ form.source }}
      <!--Form content-->
      {{form.as_p}}
      <!--Form button-->
      <button class="btn waves-effect waves-light" type="submit" name="action">Submit
      </button>    
    </form>
    </main>
  {% endblock %}
  </div>
</div>

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 мая 2018

Изменение ссылки href и указание места HTML-кода, в котором будет отображаться контент
Основные / шаблоны / главная / home.html:

...
<a class="waves-effect waves-light btn modal-trigger" href="#modal1">Create Book</a>
...
<!-- Modal Structure -->
<div id="modal1" class="modal">
  <div class="modal-content">
    <!--Form content goes in here.-->
  </div>
</div>
{% endblock %}
<!-- django include tag removed -->

Jquery для рендеринга формы в модале через маршруты django
Основные / шаблоны / главная / home.html:

<script>
$( document ).ready(function() {
  $('.modal').modal();
  $('.modal-content').load("{% url 'books:create' %}");
});
</script>

Наконец, форма книги с указанием обратного пути.
_library / шаблоны / библиотека / book_form.html _:

<h5>Add book information</h5>
{% if form.errors.non_field_errors %}
  {{ form.errors.non_field_errors }}
{% endif %}
<form method="POST" action="{% url 'books:create' %}">
  {% csrf_token %}
  {{ form.non_field_errors }}
  {{ form.source.errors }}
  {{ form.source }}
  <!--Form content-->
  {{form.as_p}}
  <!--Form button-->
  <button class="btn waves-effect waves-light" type="submit" name="action">Submit form
  </button>    
</form>
...