我如何获得元史模板中的远程用户代理使用Trac的,和WSGI什么时候?

StackOverflow https://stackoverflow.com/questions/1855576

  •  13-09-2019
  •  | 
  •  

我试图做一个Trac的项目管理网站的一些定制,并已运行到一个有趣的问题。该项目有一组既SVG和PNG图像。的SVG图像具有许多优点,包括多个超链接和对PNG较小透射尺寸较大,并且只能链接到单个文档中。

我意识到这是可能使用jQuery的页面加载后嗅出了用户代理和与图像的SVG版本替换PNG,但这导致PNG发送到所有客户端。我也可以有元史替换SVG的PNG的所有客户端,然后使用jQuery把PNG回来了,但同样的问题的结果。我可以使用jQuery插入相应的图像对所有客户端,但这似乎只是傻傻地要求客户做服务器应该。

有没有一种方法,我可以得到一个模板元史里面浏览器的信息?这不仅仅是呼吁,因为我使用WSGI运行Trac的事实环境变量有点难度。我已经通过repr(locals())的输出看,并没有看到任何看起来像它解决了我的问题。我还希望避免修改Trac的源代码。

有帮助吗?

解决方案 2

好了,所以我做了一些挖的问题,而不是通过源代码grepping,而是通过编写自定义元史处理程序,吐出的每一个元素的递归repr()在当地人(与帮助,通过在previous问题)。我原本无缘req对象。它看起来就像是与使用req.environ['HTTP_USER_AGENT']一样简单。这个问题是摆在首位找到req对象。通过源代码,我仍然无法找到确切位置的模板实例化Grepping,所以这被证明是比补丁更容易,更好。

有关完整,这里是我用来更换的标志只为基于Gecko浏览器新版本元史模板位。这是一个有点哈克和可能不理想,但它的工作原理,它不会发送SVG到撒谎说他们是“像壁虎”,但不能正确渲染SVG浏览器 - 是的,我看着你的Webkit。

<py:if test="'Gecko/' in req.environ['HTTP_USER_AGENT'] and [int(x.split('/')[1]) for x in req.environ['HTTP_USER_AGENT'].split() if x.startswith('Gecko')][0] &gt; 20080101">
  <div py:match="div[@id='header']">
    <object type="image/svg+xml" id="svgLogo" data="${href.chrome('site/logo.svg')}" style="width=${chrome['logo']['width']}px; height=${chrome['logo']['height']}px;"></object>
  </div>
</py:if>

其他提示

user_agent = environ.get('HTTP_USER_AGENT', None)

或者如果environ被包裹在某种Request对象的:

user_agent = request.user_agent

顺便说一句,你或许应该看看HTTP_ACCEPT头,而不是HTTP_USER_AGENT找出代表性应予以发送。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top