PATH_INFO を使ってメソッドを指定して実行

http://hogehoge.com/dinamic/aaaaa というURLでアクセスした際に、aaaaa() というメソッドを実行させたい!という場合

urls.py

# -*- coding: utf-8 -*-
from django.conf.urls.defaults import *
urlpatterns = patterns(
    'dinamic.views'
    ,(r'^$', 'index')
    ,(r'^[a-zA-Z0-9]{1,}', 'index')
)

view.py

# -*- coding: utf-8 -*-
from django.http import HttpResponse
# os.environ を利用して PATH_INFO 取得
import os
# funcs.py は views.py と同じディレクトリ内に設置した
# 別にどこにおいてあっても構わない
import funcs

def index(request):
    func_name = getFuncNameStringsByPathInfo()
    func_name_list = dir(funcs)
    if len(func_name_list) == 0:
        result = '関数が無い'
    elif hasFuncName(func_name, func_name_list) == False :
        result = 'メソッドが無い'
    else:
        method = getattr(funcs, func_name)
        result = method()
    return HttpResponse(result, mimetype='text/plain')

def getFuncNameStringsByPathInfo():
    if os.environ.has_key('PATH_INFO'):
        if os.environ['PATH_INFO'] != '':
            path_info = os.environ['PATH_INFO'].split('/')
            func_name = path_info[2:3]
            func_name = func_name[0]
            return func_name
    return None

def hasFuncName(text, funcs_list):
    if not isinstance(text, str):
        return False
    if text == '':
        return False
    if not funcs_list.index(text):
        return False
    return True

funcs.py

# -*- coding: utf-8 -*-

def aaaaa():
    return "イェアイェア"

def abced():
    return "abc"

これでできた。しかし views.py のメソッド名探す箇所はなんとかしないと…

(追記) ここまでで無駄に長くなったので短くしたのがこちら