代码之家  ›  专栏  ›  技术社区  ›  atharh

获取匹配URL模式的名称

  •  1
  • atharh  · 技术社区  · 15 年前

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

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

    请求路径/home,我想得到name的值,在本例中是网站.home.

    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
    

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

    1 回复  |  直到 15 年前
        1
  •  1
  •   Boldewyn    15 年前

    如何通过请求对象和中间件来实现呢?比如:

    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
    

    以及使用中的默认上下文预处理器设置.py:

    "django.core.context_processors.request",
    

    request.name 在中间件执行之后的任何地方。