def edit(request, name): """Allows users to edit wiki pages.""" try: page = Page.objects.get(name=name) except Page.DoesNotExist: page = None if request.method == 'POST': form = PageForm(request.POST) if form.is_valid(): if not page: # it's a new page page = Page() page.name = form.cleaned_data['name'] page.user = request.user page.created_on = datetime.now() page.save() page_revision = PageRevision(content = form.cleaned_data['content'], edit_reason = form.cleaned_data['edit_reason'], user = request.user, revision_for = page) page_revision.save() page.current_revision = page_revision page.save() else: # it's an edit on an old page page.name = form.cleaned_data['name'] revision_count = PageRevision.objects.filter(revision_for = page).count() new_rev = revision_count + 1 page_revision = PageRevision(content = form.cleaned_data['content'], edit_reason = form.cleaned_data['edit_reason'], user = request.user, revision_for = page, revision_num = new_rev) page_revision.save() page.current_revision = page_revision page.modified_on = datetime.now() page.user = request.user page.save() return HttpResponseRedirect('../../%s/' % page.name) else: if page: page_dict = page.__dict__ # we have phased out page.content, # instead page will be a reference to current revision content. # but for the purposes of the form, we'll emulate it (ugly hack!) page_dict['content'] = page.current_revision.content form = PageForm(initial=page_dict) else: form = PageForm(initial={'name': name}) context = RequestContext(request) return render_to_response('wiki/edit.html', {'form': form}, context)
def edit_page(request, page_slug=None, template_name='page/edit.html'): title = title_from_slug(page_slug) try: page = Page.objects.get(slug=page_slug) except Page.DoesNotExist: page = Page() if request.method == 'POST': revision = PageRevision(page=page, number=page.next_revision()) form = PageRevisionForm(request.POST, instance=revision) if form.is_valid(): # Save the page, in case it is new and because a revision requires a valid Page object page.title = title page.slug = page_slug page.save() # Save the revision new_revision = form.save(commit=False) new_revision.page = page new_revision.number = page.next_revision() new_revision.save() # Update the page's current revision now that the new revision has been persisted page.current_revision = new_revision page.save() return HttpResponseRedirect("/" + page_slug) else: print form.errors else: form = PageRevisionForm(instance=page.current_revision, initial={"comment": ""}) context = { 'title': title, 'form': form.as_table(), } return render_to_response(template_name, RequestContext(request, context))