使用相对URL

时间:2013-12-06 09:59:03

标签: python cherrypy

我使用cherrypy和Mako编写一个用Python编写的简单Web应用程序。所以,我的问题也很简单。 我有一个网址为http://1.2.3.4/a/page_first的网页。此外,还有一个可在网址http://1.2.3.4/a/page_first/my_image.png上使用的图片。我想在page_first上找到my_image.png。 我添加了标记<img src="my_image.png"/>,但未显示。我查看了网络开发者工具 - >网络,看到图片的请求网址为http://1.2.3.4/a/my_image.png,而不是http://1.2.3.4/a/page_first/my_image.png

为什么会这样?

感谢。

2 个答案:

答案 0 :(得分:2)

页面地址必须为http://1.2.3.4/a/page_first/(带斜杠)。

<强>增加:

您似乎不了解相对网址,所以让我解释一下。当您引用此<img src="my_image.png"/>之类的图像时,标记中的图像URL没有任何主机/路径信息,因此路径取自引用该图像的HTML页面的地址。由于路径是最后一个斜杠的所有内容,因此它是http://1.2.3.4/a/。因此,浏览器将请求的完整图片网址为http://1.2.3.4/a/my_image.png

您希望它为http://1.2.3.4/a/page_first/my_image.png,因此HTML网页的路径部分必须为/a/page_first/

请注意,浏览器不会认为page_first是“目录”只是因为它没有“扩展名”,并且不会自动添加尾部斜杠。当您访问发布静态目录和文件的服务器并指定路径的目录名并省略尾部斜杠(例如http://www.example.com/some/path/here)时,服务器可以确定您实际请求目录,并添加斜杠(通常也是默认/索引文件名)。通常情况下,动态网站的URL是编程的。

所以基本上你需要在页面路径中明确包含尾部斜杠:dispatcher.connect('page','/a/:number_of_page/', controller=self, action='page_method')并始终用尾部斜杠(http://1.2.3.4/a/page_first/)引用它,否则路由将不匹配。

作为旁注,通常您将图像和其他静态文件放入专用目录中,并使用CherryPy的静态目录工具或者如果它是高负载站点,使用专用服务器来提供它们。

答案 1 :(得分:1)

尝试<img src="/page_first/my_image.png"/>