Hey Bob, the problem is probably the use of page.form. The use of "form" in that case refers to the name of the model, which in Mezzanine's form page_processor case is form, in your case it should be homepage. If you change all uses in the template from page.form to page.homepage I think you will at least get much closer.
On Sun, May 18, 2014 at 8:43 AM, bob hosk <[email protected]> wrote: > I've made a custom HomePage model, so I can edit the home page content > (headers etc) > from the admin easily. I'm trying to add a 'Contact us' form to the bottom > of this page. > > In my 'myproject/mytheme' dir I have 'page_processors.py' containing > > from django import forms > from django.http import HttpResponseRedirect > from mezzanine.pages.page_processors import processor_for > from .models import HomePage > > class ContactForm(forms.Form): > subject = forms.CharField(max_length=100, initial='The subject...', > required=True) > message = forms.CharField(max_length= 5000, widget=forms.Textarea, > initial='Hello, ', required=True) > sender = forms.EmailField(initial='Your e-mail...') > rchoices= ( > ('WORK','Hire Me'), > ('PROB','Site problems'), > ('OTH', 'Other'), > ) > regarding = ChoiceField(widget=forms.Select(), choices=rchoices, > blank_choice='Regarding?', initial='blank_choice') > > @processor_for(HomePage) > def contact_form(request, page): > form = ContactForm() > if request.method == 'POST': > form = ContactForm(request.POST) > if form.is_valid(): # All validation rules pass > > subject = form.cleaned_data['subject'] > message = form.cleaned_data['message'] > sender = form.cleaned_data['sender'] > recipients = ['[email protected]'] > print message > if cc_myself: > recipients.append(sender) > > from django.core.mail import send_mail > send_mail(subject, message, sender, recipients) > > redirect = request.path + "?submitted=true" > return HttpResponseRedirect(redirect) # Redirect after POST > > return {'form': form} > > As for the template for the custom home page, it {% extends > "pages/page.html" %}, > and at the bottom of the block I have > > {{ block.super }} > {% if request.GET.sent %} > {% editable page.form.response %} > {{ page.form.response|richtext_filters|safe }} > {% endeditable %} > {% else %} > {% with page.form as page_form %} > {% editable page_form.content %} > {{ page_form.content|richtext_filters|safe }} > {% endeditable %} > {% endwith %} > > {% errors_for form %} > > <form class="mezzanine-form" method="post"{% if form.is_multipart %} > enctype="multipart/form-data"{% endif %}> > {% fields_for form %} > <div class="form-actions"> > <input class="btn btn-primary btn-lg" type="submit" value="{{ > page.form.button_text }}"> > </div> > </form> > {% endif %} > > which I copied from 'mezzanine/forms/templates/pages/form.html' mostly. > > This gives a variable not found error when the homepage is loaded. If > instead I did > {% fields_for page.form %} then I don't get an error but nor do the fields > appear to be rendered. > > How do I get this to work? > > > > > > -- > You received this message because you are subscribed to the Google Groups > "Mezzanine Users" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "Mezzanine Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
