2013-12-06 1 views
2

Я делаю простое веб-приложение, написанное на Python с использованием cherrypy и Mako. Итак, мой вопрос тоже прост. У меня есть одна страница с URL-адресом http://1.2.3.4/a/page_first. Также есть изображение, доступное по адресу http://1.2.3.4/a/page_first/my_image.png. И я хочу найти my_image.png на странице_first. Я добавил тег <img src="my_image.png"/>, но он не показан. Я просмотрел веб-инструменты разработчика-> Сеть и увидел, что URL-адрес для этого изображения был http://1.2.3.4/a/my_image.png, а не http://1.2.3.4/a/page_first/my_image.png.Использование относительного URL-адреса

Почему это происходит?

Спасибо.

ответ

2

Адрес страницы должен быть http://1.2.3.4/a/page_first/ (с косой чертой в конце).

ДОБАВЛЕНО:

Вам не кажется, понимают относительные адреса, поэтому позвольте мне объяснить. Когда вы ссылаетесь на изображение, подобное этому <img src="my_image.png"/>, URL-адрес изображения в теге не содержит информации о хосте/пути, поэтому путь берется из адреса страницы HTML, относящейся к изображению. Поскольку путь - это все до последней косой черты, в вашем случае это http://1.2.3.4/a/. Таким образом, полный URL-адрес изображения, который будет запрашиваться браузером, будет 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 является «каталогом» только потому, что он не имеет «расширения» и автоматически не добавляет конечную косую черту. Когда вы обращаетесь к серверу, публикующему статические dirs и файлы, и указываете имя каталога для пути и опускаете конечную косую черту (например, 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.

+0

Я не понимаю вас полностью ... Итак, есть картограф: 'dispatcher.connect ('page', '/ a /: number_of_page', controller = self, action = 'page_method')' и 'dispatcher.connect ('image', '/ a /: number_of_page/my_image.png', controller = self, action = 'image_method') '. Может быть, проблема здесь ... –

+0

@Dmitriy_Cert добавил к моему ответу – jwalker

+0

jwalker, это очень подробный ответ. Оно работает. Большое спасибо! Я начинаю, и я никогда не догадаюсь. –

1

Попытка <img src="/page_first/my_image.png"/>

+0

Да, это работает. Но мне нужно точно '' –

+0

Установите статические файлы dir then. –