문제

그래서 나는 당신의 페이지에 당신의 트위터 피드를 표시하는 방법을 제공하는 django 재사용 가능한 앱을 작성하려고합니다. 나는 그것이 이미 20 번 존재한다는 것을 잘 알고있다. 학업 운동입니다. :)

디렉토리 구조는 매우 간단합니다.

myproject
|__  __init__.py
|__  manage.py
|__  settings.py
|__  myapp
     |__  __init__.py
     |__  admin.py
     |__  conf
          |__  __init__.py
          |__  appsettings.py
     |__  feedparser.py
     |__  models.py
     |__  templates
          |__  __init__.py
     |__  templatetags
          |__  __init__.py
          |__  twitterfeed.py
     |__  views.py
|__  templates
          |__  base.html
|__  urls.py

Django Shell을 실행할 때 Twitterfeed.py에 정의 된 기능은 완벽하게 작동합니다. 또한 템플릿 태그가 올바르게 명명되고 등록되어 있다고 생각합니다.

보시다시피, 나는 우수한 것을 사용합니다 보편적 인 피드 파서. 내 문제는 UFP 자체 내에 있지 않지만 템플릿 태그 라이브러리를 가져 오는 동안 UFP가 호출 할 수 없다. 내가 {% load twitterfeed %} base.py에서는 다음과 같은 오류가 발생합니다.

'Twitterfeed'는 유효한 태그 라이브러리가 아닙니다 : django.templatetags.twitterfeed에서 템플릿 라이브러리를로드 할 수 없습니다. FeedParser라는 모듈 없음

다음 문을 사용하여 FeedParser를 가져옵니다.

import re, datetime, time, myapp.feedparser

내가 알 수있는 최선의 오류 메시지는 약간 속이는 것입니다. 템플릿 라이브러리가로드 될 때 수입업자가 진행되고 있다고 생각합니다. 이것이 Django의 해석입니다.

앱의 사용자가 PythonPath에 어딘가에 FeedParser를 배치 할 필요없이 재사용 가능한 앱에서 FeedParser.py를 가져올 수있는 방법이 있습니까?

감사!

도움이 되었습니까?

해결책

이것은 Python 2.6 이상에서 해결 된 성가신 상대 경로 문제 중 하나처럼 보이지만 (수입을 할 수있는 곳). 이 문제를 해결하는 저렴하고 유쾌한 방법 중 하나는 FeedParser.py를 TemplateTags 디렉토리로 옮기는 것입니다.

다른 팁

다음과 같은 방식으로 이런 종류의 문제 (전체 프로젝트의 종속성 인 라이브러리)를 해결합니다. 먼저 프로젝트의 루트에 "ext"디렉토리를 만듭니다 (귀하의 경우 myproject/ext). 그런 다음 해당 내선 디렉토리에 FeedParser와 같은 종속성을 배치합니다. myproject/ext/feedparser

마지막으로, 나는 manage.py 스크립트를 변경하여 sys.path의 전면에 내선/ 디렉토리를 삽입합니다. 이것은 둘 다를 의미합니다 ./manage.py runserver 그리고 ./manage.py shell 올바른 경로를 선택합니다.

# manage.py
import os, sys
sys.path.insert(0, os.path.join(os.path.dirname(__file__), 'ext'))
# ... rest of manage.py

VirtualEnvs와 같은 것들을 엉망으로 만들고 싶지 않다면 이것이 정말로 잘 작동합니다. 프로젝트를 배포 할 때 경로가 올바른지 확인해야합니다. 일반적으로 동일하게 추가 하여이 문제를 해결합니다. sys.path.insert mod_wsgi app.wsgi 파일의 시작 부분에 줄을 서십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top