示例#1
0
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)
示例#2
0
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))