y
yaregMay 21, 2017, 11:46 a.m.

Контактная форма

Доброго времени суток!!Можно ли реализовать вашу контактную форму, как в статье, в оверлее на подобие такого: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_css_login_form_modal Заранее спасибо!

We recommend hosting TIMEWEB
We recommend hosting TIMEWEB
Stable hosting, on which the social network EVILEG is located. For projects on Django we recommend VDS hosting.

Do you like it? Share on social networks!

11
Evgenii Legotckoi
  • May 21, 2017, 12:27 p.m.

День добрый.

Да. Такое можно реализовать. Самое простое - это посмотрите в сторону использования django-bootstrap3 . Это автоматически снимет кучу проблем с вёрсткой. Про подключение bootstrap к Django я писал в этой статье .

У меня на сайте используются модальные окна из bootstrap 3. Например, предварительный просмотр комментариев и вставка программного кода в комментарии. Посмотрите на ToolBar`е редактора комментариев. Конечно без анимации, но это можно настроить покрутив немного CSS.

Обычно код модального окна в Bootstrap выглядит следующим образом

<div class="modal">
  <div class="modal-dialog">
    <div class="modal-content">
      <div class="modal-header">
        <button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
        <h4 class="modal-title">Modal title</h4>
      </div>
      <div class="modal-body">
        <p>One fine body…</p>
      </div>
      <div class="modal-footer">
        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
        <button type="button" class="btn btn-primary">Save changes</button>
      </div>
    </div>
  </div>
</div>

Чтобы показать окно, необходимо вызвать соответствующий javascript код. Нужно, чтобы код javascript код Bootstrap`а также был подключён. В статье этот момент имеется.

$('#myModal').modal('show') 

Обработку формы можно уже сделать также, как было в статье про контактную форму. Либо усложнить с помощью AJAX запросов.

    y
    • May 21, 2017, 12:58 p.m.

    У меня проблема в том, что я не могу сказать самому Django, чтобы тот шаблон, который описывается в статье, отобразился в этом модальном окне. Как сделать это?

      Evgenii Legotckoi
      • May 21, 2017, 1:01 p.m.

      Поместить код контактной формы внутрь модального диалога.

      <div class="modal-body">
             Поместить код контактной формы здесь
      </div>
        y
        • May 21, 2017, 1:19 p.m.

        Простите, конечно, что лезу с такими пустяками, просто хотеться познать Django по полной(пишу диплом на нем и новичок к тому же). При добавления кода прямо туда выдает просто что сообщение отправлено и все. Помогите пожалуйста чайнику, нигде просто решения найти не могу) Прикрепляю код своего модала и контактной формы

          y
          • May 21, 2017, 1:20 p.m.

          Вот второй

            Evgenii Legotckoi
            • May 21, 2017, 1:39 p.m.

            Хех... За написание диплома по полной Django не познаете, только на живом работающем проекте. Но это всё лирика. А теперь к делу.

            Вы в запросе-то в контекст передали контактную форму?

            context['contact_form'] = ContactForm()

            Если в контексте не будет контактной формы, то правильно, что показывает надпись Сообщение отправлено. Код в modal.html правильно поставили. Нужно только во вьюшке (представлении правильно написать). Смотрите в статье метод get у EContactsView.

              y
              • May 21, 2017, 1:55 p.m.

              Да, все прописано также, как и у вас

                y
                • May 21, 2017, 2:04 p.m.

                а шаблон прописанный в самой вьюхе влияет на это как-нибудь?

                  y
                  • May 21, 2017, 2:24 p.m.
                  class ContactsView(View):
                      template_name = 'tovar/contact.html'
                  
                      # В случае get запроса, мы будем отправлять просто страницу с контактной формой
                      def get(self, request, *args, **kwargs):
                          context = {}
                          context.update(csrf(request))  # Обязательно добавьте в шаблон защитный токен
                          context['contact_form'] = ContactForm()
                  
                          return render_to_response(template_name=self.template_name, context=context)
                  
                      def post(self, request, *args, **kwargs):
                          context = {}
                  
                          form = ContactForm(request.POST)
                  
                          # Если не выполнить проверку на правильность ввода данных,
                          # то не сможем забрать эти данные из формы... хотя что здесь проверять?
                          if form.is_valid():
                              email_subject = 'Сообщение через контактную форму '
                              email_body = "С сайта отправлено новое сообщение\n\n" \
                                           "Имя отправителя: %s \n" \
                                           "фамилия отправителя: %s \n" \
                                           "Телефон отправителя: %s \n" \
                                           "E-mail отправителя: %s \n\n" \
                                            % \
                                           (form.cleaned_data['name'], form.cleaned_data['lastname'], form.cleaned_data['phone'],
                                            form.cleaned_data['email'])
                  
                              # и отправляем сообщение
                              send_mail(email_subject, email_body, settings.EMAIL_HOST_USER, ['target_email@example.com'],
                                        fail_silently=False)
                  
                          return render_to_response(template_name=self.template_name, context=context)
                    y
                    • May 22, 2017, 10:04 a.m.

                    Ладно, спасибо вам за помощь в любом случае, пойду дальше штудировать документацию

                      Evgenii Legotckoi
                      • May 23, 2017, 1:37 a.m.

                      В зависимости от того, какой шаблон передаётся в render_to_response, тот и будет рендериться - это всё, на что влияет заданный шаблон. Контактная форма будет видна в том, случае, если она была передана в контекст.
                      У вас есть условие в шаблоне, которое отвечает за отображение контактной формы:

                      <h1>Прайс товара</h1>
                          <article>
                          {% if contact_form %}
                              <p>Заполните все формы для отправки заявки</p>
                              <p>Наши операторы оперативно вышлют файл с подробными ценами на нашу продукцию</p>
                              <form id="contact_form"  method="post" style="width: 300px;">
                                  {% csrf_token %}
                                  {% bootstrap_form contact_form %}
                                  {% buttons %}
                                      <button type="submit" class="btn btn-primary">{% bootstrap_icon "send" %}  Отправить</button>
                                  {% endbuttons %}
                              </form>
                          {% else %}
                              <p>Сообщение отправлено</p>
                          {% endif %}
                          </article>

                      Исходя из вьюшки метод get должен нормально отображать контактную форму. А метод post будет отображать "Сообщение отправлено"

                      Возможно, что какой-то косяк в самой Контактной форме, что она не рендерится.

                        Comments

                        Only authorized users can post comments.
                        Please, Log in or Sign up
                        e
                        • ehot
                        • April 1, 2024, 12:29 a.m.

                        C++ - Тест 003. Условия и циклы

                        • Result:78points,
                        • Rating points2
                        B

                        C++ - Test 002. Constants

                        • Result:16points,
                        • Rating points-10
                        B

                        C++ - Test 001. The first program and data types

                        • Result:46points,
                        • Rating points-6
                        Last comments
                        k
                        kmssrFeb. 9, 2024, 5:43 a.m.
                        Qt Linux - Lesson 001. Autorun Qt application under Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        Qt WinAPI - Lesson 007. Working with ICMP Ping in Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        EVA
                        EVADec. 25, 2023, 9:30 p.m.
                        Boost - static linking in CMake project under Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                        J
                        JonnyJoDec. 25, 2023, 7:38 p.m.
                        Boost - static linking in CMake project under Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                        G
                        GvozdikDec. 19, 2023, 8:01 a.m.
                        Qt/C++ - Lesson 056. Connecting the Boost library in Qt for MinGW and MSVC compilers Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                        Now discuss on the forum
                        a
                        a_vlasovApril 14, 2024, 4:41 p.m.
                        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Евгений, добрый день! Такой вопрос. Верно ли следующее утверждение: Любое Android-приложение, написанное на Java/Kotlin чисто теоретически (пусть и с большими трудностями) можно написать и на C+…
                        Павел Дорофеев
                        Павел ДорофеевApril 14, 2024, 12:35 p.m.
                        QTableWidget с 2 заголовками Вот тут есть кастомный QTableView с многорядностью проект поддерживается, обращайтесь
                        Mm
                        Mind minglesApril 12, 2024, 10:42 a.m.
                        ASO Service Forum: Enhancing App Visibility and Reach Welcome to the ASO Service Forum, your ultimate destination for insights, discussions, and strategies revolving around App Store Optimization. ASO (App Store Optimization) is paramoun…
                        f
                        fastrexApril 4, 2024, 2:47 p.m.
                        Вернуть старое поведение QComboBox, не менять индекс при resetModel Добрый день! У нас много проектов в которых используется QComboBox, в версии 5.5.1, когда модель испускает сигнал resetModel, currentIndex не менялся. В версии 5.15 при resetModel происходит try…

                        Follow us in social networks