2009-06-25 10 views
1

私は、要求が正常に対して解決しまったURLパターンの名前にアクセスする必要がある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

私はbarszczmm で[1] [ここ]この質問に対する最良の答えが答えたと思います[1]:http://stackoverflow.com/questions/3165037/django-resolve -get-the-name-of-the-view-function/10842650#10842650 – andzep

答えて

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これは、ミドルウェアのビューとまったく同じです。完全なリクエストオブジェクトをすべてのテンプレートに詰め込むのが嫌いなら、依然としてビューミドルウェアと独自のコンテキストプロセッサを組み合わせて、リクエストオブジェクトから値を引き出し、直接コンテキストに配置することができます。 –

+1

私は上記をやってみましたが、view_kwargs dictはキー 'name'を持っていません。あなたは、URL名がdictで終わると確信していますか? – atharh

+0

辞書としてそれを書き換えてみてください:{「名前」:「website.home」} urls.py – Boldewyn

関連する問題