### urls.py:

urlpatterns = patterns('',
  (r'^admin/(.*?)/(.*?)/edit/(.*?)/$', 'myproj.myapp.views.admin_edit_callback'),

  # note -- the pattern for the overall admin must come after
  (r'^admin/(.*)', admin.site.root),
)

### views.py:

from django.contrib import admin
from django.http import HttpResponseRedirect
from django.contrib.admin.views.decorators import staff_member_required

CALLBACK_URL_VAR = 'callback_url'

@staff_member_required
def admin_edit_callback(request, app, model, id):
    # GET == the initial request -- save the referer in the session,
    # then call admin.site.model_page to render the form
    if request.method == 'GET':
        request.session[CALLBACK_URL_VAR] = request.META['HTTP_REFERER']
        # force it into "popup" mode to hide breadcrumbs, etc
        # (since they'll all be aimed at incorrect URLs otherwise)
        if '_popup' not in request.GET:
            gtmp = request.GET.copy()
            gtmp['_popup'] = 1
            request.GET = gtmp
        return admin.site.model_page(request, app, model, id)
    # POST == call model and, if we get a valid HttpResponseRedirect,
    # override it with a redirect to the callback URL we saved earlier
    elif request.method == 'POST':
        response = admin.site.model_page(request, app, model, id)
        if isinstance(response, HttpResponseRedirect) and \
           CALLBACK_URL_VAR in request.session:
            response['Location'] = request.session[CALLBACK_URL_VAR]
            del request.session[CALLBACK_URL_VAR]
        return response


### my_template.html:

<a href="/admin/foo/bar/edit/12345/">Edit, and return!</a>
<a href="/admin/pages/article/edit/12345">Edit, then come back</a>