Среди нескольких других параметров номер страницы и общий номер страницы передаются в HTML-код нижнего колонтитула как параметры запроса, как указано в официальных документах:
... [номер страницы ] аргументы отправляются в html-документы заголовка / нижнего колонтитула в модуле GET.
blockquote>Источник: http://wkhtmltopdf.org/usage/wkhtmltopdf.txt
Таким образом, решение состоит в том, чтобы получить эти параметры, используя бит JS и превращая их в шаблон HTML. Вот полный рабочий пример HTML нижнего колонтитула:
Page of
substitutePdfVariables()
вызывается в телеonload
. Затем мы получаем каждую поддерживаемую переменную из строки запроса и заменяем содержимое во всех элементах соответствующим именем класса.
Для Python 3.5 + использование:
import importlib.util
spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py")
foo = importlib.util.module_from_spec(spec)
spec.loader.exec_module(foo)
foo.MyClass()
Для использования Python 3.3 и 3.4:
from importlib.machinery import SourceFileLoader
foo = SourceFileLoader("module.name", "/path/to/file.py").load_module()
foo.MyClass()
(Хотя это было удержано от использования в Python 3.4.)
Для использования Python 2:
import imp
foo = imp.load_source('module.name', '/path/to/file.py')
foo.MyClass()
существуют эквивалентные функции удобства для скомпилированных файлов Python и DLLs.
См. также http://bugs.python.org/issue21436 .
модули пакета Импорта во времени выполнения (рецепт Python)
http://code.activestate.com/recipes/223972/
###################
## #
## classloader.py #
## #
###################
import sys, types
def _get_mod(modulePath):
try:
aMod = sys.modules[modulePath]
if not isinstance(aMod, types.ModuleType):
raise KeyError
except KeyError:
# The last [''] is very important!
aMod = __import__(modulePath, globals(), locals(), [''])
sys.modules[modulePath] = aMod
return aMod
def _get_func(fullFuncName):
"""Retrieve a function object from a full dotted-package name."""
# Parse out the path, module, and function
lastDot = fullFuncName.rfind(u".")
funcName = fullFuncName[lastDot + 1:]
modPath = fullFuncName[:lastDot]
aMod = _get_mod(modPath)
aFunc = getattr(aMod, funcName)
# Assert that the function is a *callable* attribute.
assert callable(aFunc), u"%s is not callable." % fullFuncName
# Return a reference to the function itself,
# not the results of the function.
return aFunc
def _get_class(fullClassName, parentClass=None):
"""Load a module and retrieve a class (NOT an instance).
If the parentClass is supplied, className must be of parentClass
or a subclass of parentClass (or None is returned).
"""
aClass = _get_func(fullClassName)
# Assert that the class is a subclass of parentClass.
if parentClass is not None:
if not issubclass(aClass, parentClass):
raise TypeError(u"%s is not a subclass of %s" %
(fullClassName, parentClass))
# Return a reference to the class itself, not an instantiated object.
return aClass
######################
## Usage ##
######################
class StorageManager: pass
class StorageManagerMySQL(StorageManager): pass
def storage_object(aFullClassName, allOptions={}):
aStoreClass = _get_class(aFullClassName, StorageManager)
return aStoreClass(allOptions)
Я полагаю, что можно использовать imp.find_module()
и imp.load_module()
для загрузки указанного модуля. Необходимо будет отколоть имя модуля пути, т.е. если бы Вы хотели загрузиться /home/mypath/mymodule.py
, то необходимо было бы сделать:
imp.find_module('mymodule', '/home/mypath/')
..., но это должно сделать задание.
def import_file(full_path_to_module):
try:
import os
module_dir, module_file = os.path.split(full_path_to_module)
module_name, module_ext = os.path.splitext(module_file)
save_cwd = os.getcwd()
os.chdir(module_dir)
module_obj = __import__(module_name)
module_obj.__file__ = full_path_to_module
globals()[module_name] = module_obj
os.chdir(save_cwd)
except:
raise ImportError
import_file('/home/somebody/somemodule.py')
Вы имеете в виду загрузку или импорт?
можно управлять списком sys.path, определяют путь к модулю, затем импортируют модуль. Например, учитывая модуль в:
/foo/bar.py
Вы могли сделать:
import sys
sys.path[0:0] = ['/foo'] # puts the /foo directory at the start of your path
import bar
Можно также сделать что-то вроде этого и добавить каталог, что конфигурационный файл находится в к пути загрузки Python, и затем просто сделайте нормальный импорт, предположив знание названия файла заранее, в этом случае "конфигурация".
Грязный, но это работает.
configfile = '~/config.py'
import os
import sys
sys.path.append(os.path.dirname(os.path.expanduser(configfile)))
import config
Преимущество добавления пути к sys.path (по использованию импорта) состоит в том, что это упрощает вещи при импорте больше чем одного модуля из единственного пакета. Например:
import sys
# the mock-0.3.1 dir contains testcase.py, testutils.py & mock.py
sys.path.append('/foo/bar/mock-0.3.1')
from testcase import TestCase
from testutils import RunTests
from mock import Mock, sentinel, patch