Просто предоставьте статическую версию вашего сайта
На самом деле все намного проще, чем вы думаете.
Если у вас уже есть файл, содержащий все URL для вашего сайта (например, urls.py), половина работы уже выполнена.
Вот структура:
+-/website
+--/static
+---/html
+--/app/urls.py
+--/app/routes.py
+-/deploy.py
/ html - откуда будут доставляться статические файлы. urls.py содержит список всех URL для вашего сайта. Routers.py (если вы переместили маршруты из main.py) нужно будет изменить, чтобы вы могли видеть динамически генерируемую версию локально, но обслуживать статическую версию в производственном процессе. deploy.py - ваш универсальный генератор статических сайтов.
Зависит от того, как вы расположите свой модуль URL. Я лично использую его как универсальное средство для извлечения всех метаданных для страницы, кроме YMMV.
Пример:
main = [
{ 'uri':'about-us', 'url':'/', 'template':'about-us.html', 'title':'About Us' }
]
Имея все URL-адреса сайта в структурированном формате, вы легко и просто сканируете свой сайт.
Конфигурация маршрута немного сложнее. Я не буду вдаваться в подробности, потому что есть слишком много разных способов, которыми это может быть достигнуто. Важной частью является код, необходимый для определения того, работаете ли вы на сервере разработки или производственного сервера.
Вот оно:
# Detect whether this the 'Development' server
DEV = os.environ['SERVER_SOFTWARE'].startswith('Dev')
Я предпочитаю поместить это в main.py и выставить его глобально, потому что я использую его для включения / выключения других вещей, таких как ведение журнала, но, опять же, YMMV.
И последнее, вам нужен сканер / сканер:
import os
import sys
import urllib2
from app.urls import main
port = '8080'
local_folder = os.getcwd() + os.sep + 'static' + os.sep + 'html' + os.sep
print 'Outputting to: ' + local_folder
print '\nCompiling:'
for page in main:
http = urllib2.urlopen('http://localhost:' + port + page['url'])
file_name = page['template']
path = local_folder + file_name
local_file = open(path, 'w')
local_file.write(http.read())
local_file.close()
print ' - ' + file_name + ' compiled successfully...'
Это действительно элементарные вещи. Я был на самом деле ошеломлен тем, как легко было, когда я его создал. Это буквально эквивалентно открытию вашего сайта постранично в браузере, сохранению в формате html и копированию этого файла в папку / static / html.
Самое приятное то, что папка / html работает как любая другая статическая папка, поэтому она будет автоматически кэшироваться, а срок действия кэша будет таким же, как и у всех остальных ваших статических файлов.
Примечание. При этом обрабатывается сайт, на котором все страницы обслуживаются с уровня корневой папки. Если вам нужно более глубокое вложение папок, для этого потребуется небольшая модификация.