y
yaregМамыр 21, 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, 1:01 Т.Қ.

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

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

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

          y
          • Мамыр 21, 2017, 1:20 Т.Қ.

          Вот второй

            Evgenii Legotckoi
            • Мамыр 21, 2017, 1:39 Т.Қ.

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

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

            context['contact_form'] = ContactForm()

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

              y
              • Мамыр 21, 2017, 1:55 Т.Қ.

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

                y
                • Мамыр 21, 2017, 2:04 Т.Қ.

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

                  y
                  • Мамыр 21, 2017, 2: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++ - Тест 001. Первая программа и типы данных

                        • Нәтиже:66ұпай,
                        • Бағалау ұпайлары-1
                        t

                        C++ - Тест 001. Первая программа и типы данных

                        • Нәтиже:33ұпай,
                        • Бағалау ұпайлары-10
                        t

                        Qt - Тест 001. Сигналы и слоты

                        • Нәтиже:52ұпай,
                        • Бағалау ұпайлары-4
                        Соңғы пікірлер
                        G
                        GoattRockҚыр. 3, 2024, 1:50 Т.Қ.
                        Linux жүйесінде файлдарды қалай көшіруге болады Задумывались когда-нибудь о том, как мы привыкли доверять свои вещи службам грузоперевозок? Сейчас такие услуги стали неотъемлемой частью нашей жизни, особенно когда речь идет о переездах между …
                        d
                        dblas5Шілде 5, 2024, 11:02 Т.Ж.
                        QML - Сабақ 016. SQLite деректер қоры және онымен QML Qt-та жұмыс істеу Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
                        k
                        kmssrАқп. 8, 2024, 6:43 Т.Қ.
                        Qt Linux - Сабақ 001. Linux астында Autorun Qt қолданбасы как сделать автозапуск для флэтпака, который не даёт создавать файлы в ~/.config - вот это вопрос ))
                        АК
                        Анатолий КононенкоАқп. 5, 2024, 1:50 Т.Ж.
                        Qt WinAPI - Сабақ 007. Qt ішінде ICMP Ping арқылы жұмыс істеу Без строки #include <QRegularExpressionValidator> в заголовочном файле не работает валидатор.
                        Енді форумда талқылаңыз
                        Evgenii Legotckoi
                        Evgenii LegotckoiМаусым 24, 2024, 3:11 Т.Қ.
                        добавить qlineseries в функции Я тут. Работы оень много. Отправил его в бан.
                        F
                        FynjyШілде 22, 2024, 4:15 Т.Ж.
                        при создании qml проекта Kits есть но недоступны для выбора Поставил Qt Creator 11.0.2. Qt 6.4.3 При создании проекта Qml не могу выбрать Kits, они все недоступны, хотя настроены и при создании обычного Qt Widget приложения их можно выбрать. В чем может …
                        BlinCT
                        BlinCTМаусым 25, 2024, 1 Т.Ж.
                        Нарисовать кривую в qml Всем привет. Имеется Лист листов с тосками, точки получаны интерполяцией Лагранжа. Вопрос, как этими точками нарисовать кривую? ChartView отпадает сразу, в qt6.7 появился новый элемент…
                        BlinCT
                        BlinCTМамыр 5, 2024, 5:46 Т.Ж.
                        Написать свой GraphsView Всем привет. В Qt есть давольно старый обьект дял работы с графиками ChartsView и есть в 6.7 новый но очень сырой и со слабым функционалом GraphsView. По этой причине я хочу написать х…
                        Evgenii Legotckoi
                        Evgenii LegotckoiМамыр 2, 2024, 2:07 Т.Қ.
                        Мобильное приложение на C++Qt и бэкенд к нему на Django Rest Framework Добрый день. По моему мнению - да, но то, что будет касаться вызовов к функционалу Андроида, может создать огромные трудности.

                        Бізді әлеуметтік желілерде бақылаңыз