1

我正在编写一个 Django 上下文处理器,它需要访问成功解析请求的 URL 模式的名称。鉴于模式,

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

和请求路径 /home,我想获取 name 的值,在本例中是 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

我可以用它来实现我的目标,但我的直觉告诉我必须有更好的方法。谢谢您的帮助。

4

1 回答 1

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在中间件执行后通过任何地方获取名称。

干杯,

于 2009-06-25T09:44:08.853 回答