y
yareg21 мая 2017 г. 11:46

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

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

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

11
Evgenii Legotckoi
  • 21 мая 2017 г. 12:27

День добрый.

Да. Такое можно реализовать. Самое простое - это посмотрите в сторону использования 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
    • 21 мая 2017 г. 12:58

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

      Evgenii Legotckoi
      • 21 мая 2017 г. 13:01

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

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

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

          y
          • 21 мая 2017 г. 13:20

          Вот второй

            Evgenii Legotckoi
            • 21 мая 2017 г. 13:39

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

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

            context['contact_form'] = ContactForm()

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

              y
              • 21 мая 2017 г. 13:55

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

                y
                • 21 мая 2017 г. 14:04

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

                  y
                  • 21 мая 2017 г. 14:24
                  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
                    • 22 мая 2017 г. 10:04

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

                      Evgenii Legotckoi
                      • 23 мая 2017 г. 1:37

                      В зависимости от того, какой шаблон передаётся в 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 будет отображать "Сообщение отправлено"

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

                        Комментарии

                        Только авторизованные пользователи могут публиковать комментарии.
                        Пожалуйста, авторизуйтесь или зарегистрируйтесь
                        Дмитрий

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:60баллов,
                        • Очки рейтинга-1
                        Дмитрий

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

                        • Результат:92баллов,
                        • Очки рейтинга8
                        d
                        • dsfs
                        • 26 апреля 2024 г. 14:56

                        C++ - Тест 004. Указатели, Массивы и Циклы

                        • Результат:80баллов,
                        • Очки рейтинга4
                        Последние комментарии
                        k
                        kmssr9 февраля 2024 г. 5:43
                        Qt Linux - Урок 001. Автозапуск Qt приложения под Linux как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        АК
                        Анатолий Кононенко5 февраля 2024 г. 12:50
                        Qt WinAPI - Урок 007. Работаем с ICMP Ping в Qt Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        EVA
                        EVA25 декабря 2023 г. 21:30
                        Boost - статическая линковка в CMake проекте под Windows Ошибка LNK1104 часто возникает, когда компоновщик не может найти или открыть файл библиотеки. В вашем случае, это файл libboost_locale-vc142-mt-gd-x64-1_74.lib из библиотеки Boost для C+…
                        J
                        JonnyJo25 декабря 2023 г. 19:38
                        Boost - статическая линковка в CMake проекте под Windows Сделал всё по-как у вас, но выдаёт ошибку [build] LINK : fatal error LNK1104: не удается открыть файл "libboost_locale-vc142-mt-gd-x64-1_74.lib" Хоть убей, не могу понять в чём дел…
                        G
                        Gvozdik19 декабря 2023 г. 8:01
                        Qt/C++ - Урок 056. Подключение библиотеки Boost в Qt для компиляторов MinGW и MSVC Для решения твой проблемы добавь в файл .pro строчку "LIBS += -lws2_32" она решит проблему , лично мне помогло.
                        Сейчас обсуждают на форуме
                        G
                        George137 мая 2024 г. 10:27
                        добавить qlineseries в функции в функции: "GPlotter::addSeries(QString title, QVector &arr)" я вызываю метод setChart(...), я в конструктор передал адрес на QChartView элемент
                        BlinCT
                        BlinCT5 мая 2024 г. 15:46
                        Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                        PS
                        Peter Son4 мая 2024 г. 3:57
                        Best Indian Food Restaurant In Cincinnati OH Ready to embark on a gastronomic journey like no other? Join us at App india restaurant and discover why we're renowned as the Best Indian Food Restaurant In Cincinnati OH . Whether y…
                        Evgenii Legotckoi
                        Evgenii Legotckoi3 мая 2024 г. 0:07
                        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.
                        IscanderChe
                        IscanderChe30 апреля 2024 г. 14:22
                        Во Flask рендер шаблона не передаётся в браузер Доброе утро! Имеется вот такой шаблон: <!doctype html><html> <head> <title>{{ title }}</title> <link rel="stylesheet" href="{{ url_…

                        Следите за нами в социальных сетях