LINUX.ORG.RU

Вывод формы в шаблон через templatetags

 


0

1

Всем привет!

Столкнулся с нетривиальной для меня задачей. Есть модальное, бутстреповское окно (для обратной связи), которое можно вызвать с любой страницы сайта. Шаблон модального окна инклудится в основной шаблон. Есть вьюха, которая обрабатывает введенные в форму данные и отправляет писмо на указанный e-mail.

До недавнего времен меня все устраивало, пока не задумался о каптчи. Ведь без нее, с помощью простого скриптика меня могут заспамить. А каптча хоть кака-никакая а преграда. Но вот проблемка, как прикрутить каптчу к модалке, не используя модель. Вьюху тоже нельзя использовать, так как придется вешать вьюху на какой-нибудь url, а это не то, так как модалка посто блок в шаблоне, кторый показывается и скрывается js-ом.

В голову пришла мысль использовать форму для каптчи и собственный шаблонный тег (которые я частенок использую в данном проекте), но как быть с функцией проверки формы? там ведь фигурирует request? Короче, вот что я имею:

forms.py:

from django import forms
from captcha.fields import CaptchaField

class CaptchaForm(forms.Form):
    captcha = CaptchaField()

modela.html

<div class = "modal fade" id = "contactsModal" role = "dialog">
  <div class = "modal-dialog">
    <div class = "modal-content">
      <form class = "form-horizontal" action="/feedback/" method="post">
        {% csrf_token %}
        <div class = "modal-header gom_modal_header">
          <button type="button" class="close gom_modal_close" data-dismiss="modal" aria-hidden="true">&times;</button>
          <b>{% trans "Форма обратной связи" %}</b>
        </div>
        <div class = "modal-body">
          <div class = "form-group">
            <label for = "contact-name" class = "col-lg-2 control-label">
                {% trans "Имя" %}:
            </label>
            <div class = "col-lg-10">
              <input type = "text" class = "form-control" id = "contact-name" placeholder
                      = "{% trans "Ваше полное имя" %}" name="fb_name">
            </div>
          </div>
          <div class = "form-group">
            <label for = "contact-email" class = "col-lg-2 control-label">E-mail:</label>
            <div class = "col-lg-10">
              <input type = "email" class = "form-control" id = "contact-email" placeholder =
                      "{% trans "Ваш e-mail" %}" name="fb_email">
            </div>
          </div>
          <div class = "form-group">
            <label for = "contact-msg" class = "col-lg-2 control-label">
                {% trans "Текст" %}:
            </label>
            <div class = "col-lg-10">
              <textarea class = "form-control" rows = "8" name="fb_text"></textarea>
            </div>
          </div>
        </div>
        <div class = "modal-footer gom_modal_footer">
          <button class = "btn btn-warning" type = "submit">{% trans "Отправить" %}</button>
          <a class = "btn btn-default" data-dismiss = "modal">{% trans "Закрыть" %}</a>
        </div>
      </form>
    </div>
  </div>
</div>

Была бы возможность использовать для модалки виюху, было бы все просто. Но такой возможности нет. Посему вопрос: «Как можно втулить форму каптчи и функцию проверки оной в модалку»?

Заранее спасибо.



Последнее исправление: djnoob (всего исправлений: 3)
Ответ на: комментарий от cheerfulboy

Как же быть с этими модалками!?

djnoob
() автор топика

Но вот проблемка, как прикрутить каптчу к модалке, не используя модель.

Вьюху тоже нельзя использовать, так как придется вешать вьюху на какой-нибудь url, а это не то, так как модалка посто блок в шаблоне, кторый показывается и скрывается js-ом.

Есть вьюха, которая обрабатывает введенные в форму данные и отправляет писмо на указанный e-mail.

Так есть мальчик или нет? Ты наркоман?

baverman ★★★
()

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

Komintern ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.