Hi many thanks for all the different approaches here. In the end I did 
return {'contact_form': form}
in my page processor, then {% fields_for contact_form %} in the template 
and all worked. It seems that the 
name 'form' must be passed to template by something else that was 
overriding it.

On Sunday, 18 May 2014 14:43:34 UTC+2, bob hosk 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 = ['m...@me.com']
>             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 mezzanine-users+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to