Пример #1
0
    def page_add_edit(self, request, id=None):
        model = self.model
        opts = model._meta

        if id:
            page = get_object_or_404(Page, pk=id)
            form = PageForm(request, instance=page)
            add = False
        else:
            page = None
            form = PageForm(request)
            add = True

        page_contents = not add and page.pagecontent_set.all()

        pagecontent_data = None

        if request.method == 'POST':
            if not add:
                pagecontent_forms = PageContentForm.get_forms(request)
                pagecontent_data = [pagecontent_form.render_js('from_template') for pagecontent_form in pagecontent_forms]


            if form.is_valid():
                page = form.save()

                if not add:
                    # Save the PageContents
                    for pagecontent_form in pagecontent_forms:
                        if pagecontent_form.id:
                            try:
                                page_content = PageContent.objects.get(pk=pagecontent_form.id)
                            except PageContent.DoesNotExist:
                                page_content = PageContent() # Is this ok?
                        else:
                            page_content = PageContent()
                        set_values(page_content, PAGECONTENT_FIELDS, pagecontent_form.cleaned_data)
                        page_content.page = page
                        page_content.save()

                # Inform the user
                if add:
                    request.user.message_set.create(message=_('The page was added successfully. Now you can create your content.'))
                else:
                    request.user.message_set.create(message=_('The page was updated successfully. You may edit it again below.'))

                return HttpResponseRedirect('../%d/' % page.id)

        else: # get
            if not add:
                pagecontent_data = []
                for page_content in page_contents:
                    content_form = PageContentForm(
                        initial=get_values(page_content, PAGECONTENT_FIELDS),
                        id=page_content.id)
                    pagecontent_data.append(content_form.render_js('from_template'))

        media = self.media
        if USE_TINYMCE:
            media.add_js(self.tinymce_js)
        media.add_js((
            "cms/js/dynamicforms.js",
            "cms/js/page_add.js",
        ))

        return render_to_response('cms/page_add.html', {
                'title': u'%s %s' % (add and _('Add') or _('Edit'), _('page')),
                'page': page,
                'form': form,
                'add':add,
                'page_contents': page_contents,
                'page_addons': PAGE_ADDONS,
                'pagecontent_template': PageContentForm().render_js('from_template'),
                'pagecontent_data': pagecontent_data,
                'use_tinymce': USE_TINYMCE,
                'root_path': self.admin_site.root_path,
                'media': mark_safe(media),
                'opts': opts,
            }, context_instance=RequestContext(request))