PY에서 상대 경로 해결 : Genshi 템플릿에서 일치
-
06-07-2019 - |
문제
<py:match path="foo">
<?python
import os
href = select('@href').render()
SOMEWHERE = ... # what file contained the foo tag?
path = os.path.abspath(os.path.join(os.path.dirname(SOMEWHERE), href)
f = file(path,'r')
# (do something interesting with f)
?>
</py:match>
...
<foo href="../path/relative/to/this/template/abcd.xyz"/>
위의 "어딘가"로 무엇을해야합니까? 나는 것을 원하는 href
파일과 관련하여 속성 foo
그것에 태그를 지정하십시오 href
다른 태그의 속성.
또는 PY : 매치 블록이 포함 된 파일은 무엇입니까? 파일과 다른 디렉토리에있을 수 있기 때문에 이것은 덜 좋습니다. foo
꼬리표.
덜 좋은 : 나는 Genshi 외부의 컨텍스트 인수로 렌더링하고있는 파일의 경로를 제공 할 수 있지만 위의 두 디렉토리와 다른 디렉토리에있을 수 있습니다.
해결책
드라이버 프로그램 (예 : 입력 파일을 구문 분석하는 Python 프로그램)이 포함 된 파일의 디렉토리에서 실행되는지 확인해야합니다. foo
꼬리표. 그렇지 않으면, 상대 경로 (즉, 독자가 읽는 파일의 디렉토리로 실행되는 디렉토리에서 얻는 방법)를 Python 코드의 컨텍스트 인수로 전달하고이를 추가해야합니다. os.path.join
명령.
이 설정을 사용하여 (및 Fink 패키지 Genshi-PY26을 통해 MacOS X 10.6.3에 설치된 Genshi 0.6 사용) 명령 os.getcwd()
포함 된 파일의 현재 작업 디렉토리를 반환합니다. foo
꼬리표.
이러한 복잡한 경로 구성에 대해서도 사용하는 것이 좋습니다. path=os.path.normpath(path)
, 당신은 그 결과 HTML 코드에서 그러한 것들이 유출되기를 원하지 않을 수 있기 때문입니다.
제휴하지 않습니다 StackOverflow