Windows FileSystemLoader
λ Windows μ€νμΌ( \
ν¬ν¨) λ° UNIX μ€νμΌ( /
ν¬ν¨) κ²½λ‘λ₯Ό λͺ¨λ νμ©ν΄μΌ ν©λλ€.
Windowsμμ FileSystemLoader
λ₯Ό μ¬μ©νλ©΄ λ€μμ΄ μ€ν¨ν©λλ€.
jinjaEnvironment.get_template('.\source\architecture\ARM\ARMv6-M-ARMv7-M\bo
ardTemplates\ARMv6-M-ARMv7-M.metadata')
~μ ν¨κ»
jinja2.exceptions.TemplateNotFound: .\source\architecture\ARM\ARMv6-M-ARMv7-M\bo
ardTemplates\ARMv6-M-ARMv7-M.metadata
μ΄ jinjaEnvironment.get_template('.\source\architecture\ARM\ARMv6-M-ARMv7-M\bo
ardTemplates\ARMv6-M-ARMv7-M.metadata'.replace('\\', '/'))
λ μλ²½νκ² μλν©λλ€.
Traceback (most recent call last):
File "./scripts/generateBoard.py", line 186, in <module>
metadata = jinjaEnvironment.get_template(metadataFile).render(dictionary = d
ictionary)
File "C:\Python27\lib\site-packages\jinja2\environment.py", line 830, in get_t
emplate
return self._load_template(name, self.make_globals(globals))
File "C:\Python27\lib\site-packages\jinja2\environment.py", line 804, in _load
_template
template = self.loader.load(self, name, globals)
File "C:\Python27\lib\site-packages\jinja2\loaders.py", line 113, in load
source, filename, uptodate = self.get_source(environment, name)
File "C:\Python27\lib\site-packages\jinja2\loaders.py", line 168, in get_sourc
e
pieces = split_template_path(template)
File "C:\Python27\lib\site-packages\jinja2\loaders.py", line 31, in split_temp
late_path
raise TemplateNotFound(template)
jinja2.exceptions.TemplateNotFound: .\source\architecture\ARM\ARMv6-M-ARMv7-M\bo
ardTemplates\ARMv6-M-ARMv7-M.metadata
Jinja ν νλ¦Ώ μ΄λ¦μ νμΌ μμ€ν κ²½λ‘κ° μλλλ€(FileSystemLoaderλ§ μ¬μ©ν λ νμΌ μμ€ν κ²½λ‘μ 맀νλλλΌλ). κ·Έλ€μ νμ μ¬λμλ₯Ό μ¬μ©νλ―λ‘ μλν λλ‘ μλν©λλ€.
μμ ν μκ°μ΄ μλ€λ©΄ μ΄ μ 보λ₯Ό κ΅΅μ κΈκΌ΄λ‘ λ¬Έμμ λͺ μμ μΌλ‘ λͺ μν΄μΌ νλ€κ³ μκ°ν©λλ€. μλμ μΌλ‘ λ°±μ¬λμλ₯Ό μ¬μ©ν κ²μ μλλλ€. λ€λ₯Έ νμ΄μ¬ μ½λλ₯Ό μ¬μ©νμ¬ νμΌ μ΄λ¦μ μμ±ν λ(μ: ν΄λμμ μ μ ν νμ₯μλ₯Ό κ²μνμ¬) λ¬Έμμ΄μ μμ€ν μ κΈ°λ³Έ μ¬λμκ° μμ΅λλ€(Windowsμμλ λ°±μ¬λμ). μ΄ κ²½μ° λͺ μμ μΌλ‘ μ¬λμλ₯Ό λ°κΏμΌ ν©λλ€...
BTW - Windowsλ₯Ό μ¬μ©νμ§ μμ§λ§ λͺ¨λ νλ«νΌμμ μλν΄μΌ νλ μ€ν¬λ¦½νΈλ₯Ό μμ± μ€μ λλ€.
@FreddieChopin
μ΄κ±° κ³ μ μΈκ°μ? 2019λ
μλ μ¬μ ν μν₯μ λ―ΈμΉλ κ² κ°μ΅λλ€.
λ΄κ°ν΄μΌ ν μΌμ μλμΌλ‘ λͺ¨λ \\
μ /
λ‘ λ°κΎΈλ κ²μ
λλ€.
μ΄κ±° κ³ μ μΈκ°μ?
"λ²κ·Έκ° μλλΌ κΈ°λ₯μ λλ€!" (;
μ΄κ²μ μ λ§ μ΄μν κ²μ λλ€! λ¬Έμμμ μ΄κ²μ λ³κ²½νκ±°λ μΈκΈν μ μμ΅λκΉ(ν° κΈμλ‘)?
PR νμ(λ¬Έμμ©)
λλ νλμμ μμνμ§λ§ μ΄κ²μ λ°κ²¬νμ΅λλ€. https://github.com/pallets/jinja/blob/master/jinja2/loaders.py#L43 -L61
A very basic example for a loader that looks up templates on the file
system could look like this::
from jinja2 import BaseLoader, TemplateNotFound
from os.path import join, exists, getmtime
class MyLoader(BaseLoader):
def __init__(self, path):
self.path = path
def get_source(self, environment, template):
path = join(self.path, template)
if not exists(path):
raise TemplateNotFound(template)
mtime = getmtime(path)
with file(path) as f:
source = f.read().decode('utf-8')
return source, path, lambda: mtime == getmtime(path)
λ¬Έμμμλ os.path.joinμ μ¬μ©ν΄μΌ νλ€κ³ λͺ μμ μΌλ‘ λ§νκ³ μμ΅λλ€. λ¬Έμ κ° λ μ μ νμ§ μμκΉμ?
μ€μ λ¬Έμ λ python κ²½λ‘ λͺ¨λμ΄ κΈ°λ³Έμ μΌλ‘ Windowsμμ '\'κ° μλ κ²½λ‘λ₯Ό λ°ννλ€λ κ²μ λλ€. λλ κ·Έκ²μ΄ μ΄λ»κ² λ μ¬λ°λ₯Έ νλμ΄λΌλ κ²μ μκ³ μμ§λ§ "open"κ³Ό κ°μ λ΄μ₯ ν¨μλ μ¬λμμ λ°±μ¬λμλ₯Ό λͺ¨λ νμ©νλ―λ‘ "λλ‘λ μλνμ§λ§ λλ‘λ κ·Έλ μ§ μμ΅λλ€"λΌλ μΌμ΄ λ°μν©λλ€. μλ§λ μ°λ¦¬λ νλ«νΌκ³Ό λ 립μ μΈ κ²½λ‘λ₯Ό μ²λ¦¬νλ μ΄λ€ λ°©λ²μ΄ νμν κ²μ λλ€... μΌμ’ μ "κ²½λ‘λ₯Ό λ΄λΆμ μΌλ‘ μ²λ¦¬νλ νμ΄μ¬ κ·μΉ" μ’ λ₯... μ μκ°μ μ΄κ²μ jinja2μ λ¬Έμ κ° μλλΌκ³ μκ°ν©λλ€(μ΄κ²μ Unix λ° Windowsλ μμν μ§μλλ κ²μ²λΌ 보μ΄μ§λ§ μμ λ¬Έμμ μΌλΆ "μ£Όμ"λ νμν©λλ€.
κ·Όλ³Έμ μΈ λ¬Έμ λ ν νλ¦Ώ "κ²½λ‘"κ° μ€μ λ‘ OS κ²½λ‘κ° μλλΌ "/" κ΅¬λΆ κΈ°νΈλ§ ν¬ν¨ν κ²μΌλ‘ μμλλ€λ κ²μ λλ€. κ·Έλ¬λ loaders.get_source() μμ self.searchpath λ κ²½λ‘ κ΅¬λΆ κΈ°νΈκ° νμ "/"λΌκ³ μκ°ν©λλ€.
μ΄ νμ€ κ°μ μ΄ μ¬μ©λλ λ€λ₯Έ μμΉκ° λΆλͺ ν μκΈ° λλ¬Έμ ν νλ¦Ώ κ²½λ‘λ₯Ό μ€μ OS κ²½λ‘λ‘ λ³κ²½ν΄μλ μ λ©λλ€.
μ루μ μ OS κ²½λ‘κ° νμν μ§μ μμ μ€μ OS κ²½λ‘ κ΅¬λΆμλ₯Ό ν¬ν¨νλλ‘ ν νλ¦Ώκ³Ό κ²μ κ²½λ‘λ₯Ό λͺ¨λ λ³κ²½νλ κ²μ λλ€.
def get_source(self, environment, template):
_searchpaths = self.searchpath
if path.sep != '/':
template = template.replace('/', path.sep)
_searchpaths = [p.replace('/', path.sep) for p in self.searchpath]
pieces = os.path.split(template)
for searchpath in _searchpaths:
# Existing code continues here ...
μ΄ μ½λλ₯Ό Windows 10/Python 2.7μμ κ°λ¨ν ν μ€νΈνμΌλ©° "ν νλ¦Ώμ μ°Ύμ μ μμ" μ€λ₯λ₯Ό μμ νμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μμ ν μκ°μ΄ μλ€λ©΄ μ΄ μ 보λ₯Ό κ΅΅μ κΈκΌ΄λ‘ λ¬Έμμ λͺ μμ μΌλ‘ λͺ μν΄μΌ νλ€κ³ μκ°ν©λλ€. μλμ μΌλ‘ λ°±μ¬λμλ₯Ό μ¬μ©ν κ²μ μλλλ€. λ€λ₯Έ νμ΄μ¬ μ½λλ₯Ό μ¬μ©νμ¬ νμΌ μ΄λ¦μ μμ±ν λ(μ: ν΄λμμ μ μ ν νμ₯μλ₯Ό κ²μνμ¬) λ¬Έμμ΄μ μμ€ν μ κΈ°λ³Έ μ¬λμκ° μμ΅λλ€(Windowsμμλ λ°±μ¬λμ). μ΄ κ²½μ° λͺ μμ μΌλ‘ μ¬λμλ₯Ό λ°κΏμΌ ν©λλ€...
BTW - Windowsλ₯Ό μ¬μ©νμ§ μμ§λ§ λͺ¨λ νλ«νΌμμ μλν΄μΌ νλ μ€ν¬λ¦½νΈλ₯Ό μμ± μ€μ λλ€.