как использовать формы в django-cms?
Я абсолютный новичок в django-cms. Я прошел через учебник и настроил его точно так же, как указано в документации. Теперь мне нужно создать приложение, которое использует форму для загрузки продуктов.
Я понятия не имею, как двигаться вперед с ним. Я хочу начать его с простых форм, как будто теперь, скажем, имя пользователя и пароль textbox. Как я могу использовать формы django на странице django-cms? У меня также включен плагин snippet. Мне нужна руководство для этого.
любые предложения plsss. спасибо
6 ответов
Я недавно наткнулся django-form-designer
Это довольно приятно и позволяет проектировать формы в wysiwyg образом. Работает для автономных приложений django и имеет дополнительный плагин для Django-CMS. Одно примечание: вы должны следовать автономным инструкциям в дополнение к инструкциям Django-CMS для установки.
из описания github:
основные характеристики:
- дизайн контакта формы, поисковые формы и т. д. От Администратора Django, без написания кода
- данные формы могут быть зарегистрированы и CSV-экспортированы, отправлены по электронной почте или перенаправлены на любой веб-адрес
- интеграция с Django CMS: добавление форм на любую страницу
- используйте drag & drop, чтобы изменить положение полей формы
- полностью складной интерфейс администратора для лучшего обзора над вашей формой
- реализует много полей формы, включенных в Django (TextField, EmailField, DateField и т.д.)
- правила проверки, поставляемые Django, полностью настраиваются (максимальная длина, регулярное выражение и т. д.)
- настраиваемые сообщения и метки
- поддерживает сообщение и получить формы
на самом деле решение предложенный bennylope не предпочтительный способ сделать это с помощью запроса.Сообщение в плагине может иметь очень плохие побочные эффекты (например: что, если один и тот же плагин дважды на странице? Или что, если есть несколько плагинов, ожидающих данных POST на одной странице? Эти плагины будут путать друг друга, когда есть сообщение на этой странице).
таким образом, предпочтительным способом является:
- сделайте CMSPlugin Как рассказали по bennylope к оказать форме.
- сделайте сообщение формы статически подключенным представлением (или представлением apphooked), если сообщение успешно, перенаправьте на страницу снова, если хотите.
предполагая, что ваше приложение работает, как ожидалось без Django CMS, что вы хотите сделать, это создать свой собственный плагин, чтобы показать форму. Плагин будет отображать вашу форму, которую вы уже определили в своем собственном приложении, используя шаблон плагина, который вы создали.
этот плагин для контактной формы позволяет вставлять контактную форму в шаблон страницы в любом месте, где это позволит заполнитель.
class ContactPlugin(CMSPluginBase):
"""Enables latest event to be rendered in CMS"""
model = CMSPlugin
name = "Form: Contact"
render_template = "contact_form/contact_plugin.html"
def render(self, context, instance, placeholder):
request = context['request']
context.update({
'instance': instance,
'placeholder': placeholder,
'form': ContactForm(request=request),
})
return context
в шаблоне включите весь язык шаблонов HTML и Django, необходимый для рендеринга формы.
этот другой плагин контактной формы показывает еще один пример того, как это сделать. Вместо отображения формы в контексте. Плюс в том, что вам не нужно создавать отдельный шаблон, но недостатком является то, что вы теряете некоторую модульность плагина. Это зависит от шаблона страницы, отображающего форму.
class ContactPlugin(CMSPluginBase):
model = Contact
name = _("Contact Form")
render_template = "contact.html"
def render(self, context, instance, placeholder):
request = context['request']
if request.method == "POST":
form = ContactForm(request.POST)
if form.is_valid():
form.send(instance.site_email)
context.update( {
'contact': instance,
})
return context
else:
form = ContactForm()
context.update({
'contact': instance,
'form': form,
})
return context
в любом случае вам все равно нужно определить представление чтобы принять отправку формы, вам необходимо создать представление за пределами CMS, подтверждающее получение формы с собственным шаблоном, перенаправление пользователя обратно на страницу ссылки и / или принятие запроса AJAX.
Я тоже новичок в django-cms, но способ описания ojii кажется наиболее разумным:
- сделайте CMSPlugin, как описано выше, чтобы отобразить форму.
- сделайте сообщение формы статически подключенным представлением (или представлением apphooked), если сообщение успешно, перенаправьте на страницу снова, если хотите.
однако для меня это только частичное решение, потому что я не только хочу перенаправить обратно на страницу cms, содержащую плагин в случае успеха, но и в случае ошибок формы, которые должны быть отображены. Перенаправление части не является проблемой (я просто перенаправляю обратно на запрос.META ["HTTP_REFERER"]), но часть передачи формы (ошибок) на страницу cms, содержащую плагин, сложна. Единственный ответ, который я нашел для этого: я использую сеанс (запись формы в сеанс в статическом представлении, а затем удаление ее снова в методе рендеринга плагина). Не самый лучший способ, но он работает. (Там было бы лучше, если бы конфигурация плагинов cms поддерживала какой-то способ перенаправления вместо рендеринга, но, по-видимому, такой опции нет: см.http://groups.google.com/group/django-cms/browse_thread/thread/79ab6080c80bbcb5)
Это может быть слишком поздно, но у меня была аналогичная проблема, поэтому я создал более общий плагин:https://github.com/metzlar/cms-form-plugin что очень похоже на ответ беннилопа.
вы можете работать, бросая исключение и ловя его в промежуточном по: http://djangosnippets.org/snippets/2541/