2009-06-25 26 views
1

我正在編寫一個Django上下文處理器,它需要訪問已成功解析請求的URL模式的名稱。鑑於模式,獲取匹配網址格式的名稱

url(r'^home/$', 'app.index', name='website.home') 

,並請求路徑爲/ home,我想要得到的名字的價值,在這種情況下是website.home。

我從djangosnippets.org驗證碼:

def _get_named_patterns(): 
    """ Returns a list of (pattern-name, pattern) tuples. 
    """ 
    resolver = urlresolvers.get_resolver(None) 
    patterns = sorted(
     (key, val[0][0][0]) for key, val in resolver.reverse_dict.iteritems() if isinstance(key, basestring)) 
    return patterns 

我可以用它來實現我的目標,但我的直覺說,必須有一個更好的方法。謝謝您的幫助。

+0

我認爲最好的回答這個問題,得到的回答[這裏] [1] barszczmm [1]:http://stackoverflow.com/questions/3165037/django-resolve -get-the-url-name-instead-of-the-view-function/10842650#10842650 – andzep 2012-10-24 22:51:29

回答

1

通過請求對象和中間件來做什麼?像:

class MyMiddleware (object): 
    def process_view (self, request, view_func, view_args, view_kwargs): 
    if view_kwargs.get ('name', None): 
     request.name = view_kwargs.get ('name', None) 
    ret None 

和settings.py中使用默認情況下預處理器:

"django.core.context_processors.request", 

然後你就可以通過request.name執行中間件後得到名字隨處可見。

乾杯,

+0

+1這正是視圖中間件的用途。如果您不希望將完整的請求對象填充到所有模板中,仍然可以將視圖中間件與您自己的上下文處理器配對,該處理器將請求對象的值從關係處理器中取出並直接放到上下文中。 – 2009-06-25 16:50:29