Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 9, 2012 13:05:28

Anatoly.K
От:
Зарегистрирован: 2012-01-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Одна форма на многих страницах

Здравствуйте,

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

Мне нужно усовершенствовать существующий сайт, добавив на каждую страницу возможность регистрации. Не ссылку, которая направит на страницу с регистрацией, а именно сами поля Имя, EMail, Пароль… (не спрашивайте, зачем так, просто задание). Сам сайт построен по стандартной Django-модели, соответственно, у меня есть класс-форма UserRegisterForm, есть метод register, который обрабатывает форму UserRegisterForm ну и в зависимости от POST/GET либо возвращает чистенький direct_to_template(request, ‘register.html’, {“form”: form,}), либо, если POST, то вытаскивает из формы нужные данные, регистрирует пользователя и бросает пустышку: direct_to_template(request, ‘register.html’). Да, шаблон register.html тоже есть, который описывает страничку регистрации.

Страницы сайта, которые меня интересуют, имеют формат <левая колонка><центр><правая колонка>, и шаблон для каждой странички строится по принципу:

{% block left %}{% include "left.html" %}{% endblock %}
{% block right %}{% include "right.html" %}{% endblock %}
{% block center %}<интересный код>{% endblock %}
Левая и правая колонка - всякий шлак, который не меняется и одинаков всюду.

Итак, моя задача, чтобы форма регистрации появилась внутри шаблона right.html, ну и таким образом она попадет на все странички.

Почитав, как это делается для формы логина, я понял, что мне следует использовать контекстный процессор, тогда нужная мне форма будет доступна из любого шаблона. Тут первый вопрос - это правильный подход? Могу ли я использовать контекстный процессор для своей задачи?

Теперь второй вопрос - а что именно мне нужно сбросить в контекстный процессор? Форму? Но как я тогда смогу обрабатывать POST/GET? Буду очень признателен за советы, ссылки на подобные примеры… Быстрый поиск по форуму мне ничего не дал, но, возможно, я плохо искал.

Если нужен пример текущего кода - вы только скажите, просто не хотел изначально слишком уж засорять пост кодом.



Отредактировано (Янв. 9, 2012 13:06:48)

Офлайн

#2 Янв. 9, 2012 13:37:55

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Одна форма на многих страницах

Anatoly.K
Тут первый вопрос - это правильный подход? Могу ли я использовать контекстный процессор для своей задачи?
Да, правильный. Можете.
Anatoly.K
Теперь второй вопрос - а что именно мне нужно сбросить в контекстный процессор? Форму? Но как я тогда смогу обрабатывать POST/GET?
Достаточно формы. Обрабатывать запросы должна всё та же функция register, которую вы описали. Они никуда не девается.



Офлайн

#3 Янв. 9, 2012 22:49:29

Anatoly.K
От:
Зарегистрирован: 2012-01-09
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Одна форма на многих страницах

Спасибо за совет, вроде всё сделал.
Контекстный процессор (register_co_pr) возвращает простую форму (UserRegisterForm), она подхватывается в шаблоне таким образом:

{% include "register_snippet.html" with form=register_co_pr %}
.
Ну а в шаблоне register_snippet.html просто уже шаблон с полями и кнопочкой “Зарегистрировать”, и с обработкой входящей формы form.

Вроде как я понял, как этот подход работает, получается довольно просто и понятно.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version