2011-07-27 29 views
0

在我的djang網址模式文件中,我想保留一堆子網址,但我不想讓它變醜。在Django的url.py文件中處理多個子網址

我有處理所有我的Ajax請求的文件(其輸出取決於它獲得的要求不同JSON文件

例如(在我url.py): 形式:(URL,地圖到) (ajax/do_a, ajax.do_a) ajax/do_b, ajax.do_b) ajax/do_c, ajax.do_c) ajax/do_d, ajax.do_d)

這些是所有子網址,例如。 mywebsite.com/ajax/do_a mywebsite.com/ajax/do_b 等

基本上do_a,do_b,do_c,和do_d是所有不同的請求處理程序與「ajax.py」文件中的相同。我真的不想用所有這些url填充我的urls.py文件以獲取ajax請求。我正在考慮移動這個,以便我的url.py文件中只有 ajax/ ,然後以某種方式解析我的請求處理程序(位於ajax.py文件中)中的ajax/request url,以便我可以看到之後發生了什麼字符串「ajax /」。我不知道如何做到這一點,或者如果這是一個好主意,做到這一點....任何人都可以提供一些建議?謝謝:)

+0

我不會把這些子網址,你可能想看看[命名組](https://docs.djangoproject.com/en/1.3/topics/http/urls/#named-groups)或[在網址中捕獲文本](https://docs.djangoproject.com/en/1.3 /主題/ HTTP /網址/#命名組)。 –

+0

是否所有的視圖都需要是唯一的視圖,或者你可以將'www.example.com/ajax/do_a'的'do_a'部分傳遞給同一視圖? –

+0

@j_syk我不明白你的問題 – aerain

回答

1

你可以設置一個調度器視圖來處理這些。例如,在你的urls.py:

(r'^ajax/do_(?P<do_token>(\d+))/$', 'do_dispatcher', {}, "di_dispatcher"), 

然後,給自己一個視圖來處理它:

def do_a(request): 
    pass 
def do_b(request): 
    pass 
def do_c(request): 
    pass 

DO_LOOKUP = { 
    'a' = do_a, 
    'b' = do_b, 
    'c' = do_c, 
} 

def do_dispatch(request, do_token): 
    do_func = DO_LOOKUP.get(do_token, None) 
    if do_func is None: 
     return HttpResponseNotFound("No do could be found for token '%s'!" % do_token) 
    else: 
     return do_func(request)