2016-07-27 6 views
0

(UPDATE: Я сделал лучший вопрос с лучшим ответом here я собирался удалить этот вопрос, но некоторые ответы могут оказаться полезными для будущих искателей.).нужно упаковать шаблон jinja2 для питона

Мой вопрос примерно идентичен this, но этот ответ является уродливым (требуется структура dir, включая sharedtemplates/templates/templates/), неполное, как опубликовано (пользователь «ответил» на свой вопрос), и предполагает некоторые знания, которых у меня нет.

Я работаю над своим первым веб-приложением на основе python. Компонент javascript находится в стадии разработки с использованием статической HTML-страницы. Теперь я хочу, чтобы компонент python на стороне сервера обрабатывал вызовы AJAX и отображал HTML-шаблон с помощью jinja2.

Раньше у меня был успех с python, создавая графические приложения с использованием tkinter/requests. Любите язык, но среда python (среда?) Запутанна. Я не работаю в virtualenv.

Согласно jinja2 docs, HTML-шаблоны должны быть в пакете. Затем вы создаете Environment с PackageLoader, который знает имя пакета и шаблона реж:

from jinja2 import Environment, PackageLoader 
env = Environment(loader=PackageLoader('yourapplication', 'templates')) 

Итак, вот мой index.py (это просто заглушки, и даже не пытаться оказывать ничего, но вы можете хотя бы сказать, если он сработает).

#!/usr/bin/python 
from jinja2 import Environment, PackageLoader # no prob, jinja2 correctly installed using pip 

env = Environment(loader=PackageLoader('mypkg', 'template')) # causes server error 

# if it doesn't crash, just put up a basic html page for now 
print ("Content-type: text/html\r\n\r\n") 
print("<html><head><title>hello</title></head><body>hello wuld</body></html>") 

Вот структура каталога:

index.py 
mypkg/ 
mypkg/template/index.html 
mypkg/__init__.py # empty 

Соответствующая строка из журнала ошибок:

ImportError: No module named mypkg 

Может быть, мне нужно структурировать это по-другому, и я уверен, что мне нужно для создания и вызова setup.py для установки модуля. Это часть того, что оставил другой ответ: что находится в setup.py и как он работает в этом случае? Я просмотрел десятки ресурсов на setup.py, и ни один из них, похоже, не относится к вопросу об установке шаблонов HTML.

Заранее благодарим за вашу помощь!

UPDATE: fragilewindows указал на ресурс, который рассказывает о «режиме разработчика», который, вероятно, является частью ответа. Трудность здесь заключается в том, что я хочу упаковать этот шаблон для локального развертывания, а не для распространения. Но 99% онлайн-документации касается проектов упаковки для PyPi. Мне не нужно упаковывать «проект», просто чертовски HTML-шаблон. В самом деле, единственной причиной, по которой мне нужно упаковать шаблон, является то, что это способ по умолчанию для jinja2 для доступа к шаблонам (и я хочу перейти на native в python).

Мне просто нужно убедить среду, что «mypkg» установлен, и что «шаблон» - это каталог в рамках установки. Вы можете видеть, что мои усилия до сих пор наивны; Я ожидаю, что правильный ответ будет соответственно легким.

ответ

1

Я не знаю процесса, связанного с упаковкой, но я считаю, что поскольку Jinja2 написан на Python, процесс будет таким же, как упаковка любого другого приложения на Python.

Вот несколько ссылок, которые могут быть полезны для вас:

Надеюсь, это поможет.

+0

Спасибо, то PPUG имеет содержательное представление (режим развития). Но эти другие ресурсы довольно не имеют отношения к моей проблеме. Я разрабатываю это приложение для собственного развертывания, а не для распространения. Первые семь страниц результатов поиска на упаковке python в значительной степени связаны с распространением кода, что не является моей проблемой. Я уточню свой вопрос. –

4

Я открыл WORKAROUND, here. При этом использовании шаблон не является частью модуля или пакета; он загружается непосредственно из файловой системы. Файловая система:

./index.py 
./template.html 

index.py:

#!/usr/bin/python 
import jinja2 

templateLoader = jinja2.FileSystemLoader(searchpath=".") 
templateEnv = jinja2.Environment(loader=templateLoader) 
TEMPLATE_FILE = "template.html" 
template = templateEnv.get_template(TEMPLATE_FILE) 
outputText = template.render() # this is where to put args to the template renderer 

print ("Content-type: text/html\r\n\r\n") 
print(outputText) 
0

Может быть, проблема в PYTHONPATH. Согласно Python documantation https://docs.python.org/2.7/tutorial/modules.html#the-module-search-path он ищет модулей:

  • в каталог, содержащий входной скрипт (или текущий каталог).
  • PYTHONPATH (список имен каталогов, с тем же синтаксисом, что и переменная оболочки PATH).
  • зависит от установки по умолчанию.

Вы можете добавить код в приложение - печать sys.path переменной, чтобы сделать верный путь вашего applcation также находится там.

import sys 
from jinja2 import Environment, PackageLoader # no prob, jinja2 correctly installed using pip 
print sys.path # printing your sys.path 
env = Environment(loader=PackageLoader('mypkg', 'template')) # causes server error 

Если это не Вы можете добавить на

sys.path.append(path_to_your_application) 
Смежные вопросы