Error al importar la biblioteca externa dentro de la biblioteca de códigos de plantillas de Django

StackOverflow https://stackoverflow.com/questions/1185084

Pregunta

Así que estoy tratando de escribir una aplicación Django reutilizable que proporciona un método para mostrar su feed de Twitter en su página. Sé muy bien que ya existe 20 veces. Es un ejercicio académico. :)

estructura de directorios es bastante simple:

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

Cuando se ejecuta la cáscara Django, las funciones definidas en el trabajo twitterfeed.py perfectamente. También creo que tengo las etiquetas de plantilla nominados correctamente y registrados.

Como se puede ver, yo uso el excelente rel="nofollow universal Alimentación Analizador . Mi problema no es en sí misma UFP, sino en la incapacidad de UFP a ser llamado al importar la biblioteca de etiquetas de plantilla. Cuando {% load twitterfeed %} en base.py, me sale el siguiente error:

  

'twitterfeed' no es una etiqueta válida   biblioteca: No se pudo cargar la plantilla   biblioteca de   django.templatetags.twitterfeed, n   módulo denominado feedparser

importo feedparser mediante la siguiente instrucción:

import re, datetime, time, myapp.feedparser

Lo mejor que puedo decir, este mensaje de error es ligeramente engañoso. Creo que hay una ImportError pasando cuando se carga la biblioteca de plantillas, y esta es la interpretación de Django de la misma.

¿Hay alguna manera de importar feedparser.py dentro de mi aplicación reutilizable sin que los usuarios de la aplicación para colocar en algún lugar de su feedparser PYTHONPATH?

Gracias!

¿Fue útil?

Solución

Esto se parece a una de esas cuestiones de ruta relativos molestos - resuelto en Python 2.6 y superior (donde se puede hacer la importación ..feedparser etc) pero a menudo un poco complicado en versiones anteriores. Una forma barata y alegre de solucionar este problema podría ser simplemente para mover feedparser.py en su directorio templatetags, como un hermano a twitterfeed.py

Otros consejos

puedo solucionar este tipo de problema (bibliotecas envío que son dependencias para mi proyecto en general) de la siguiente manera. En primer lugar, se crea un directorio "ext" en la raíz de mi proyecto (en su caso que se myproject/ext). Entonces pongo dependencias tales como feedparser en ese directorio ext - myproject/ext/feedparser

Por último, yo cambio mi guión manage.py para insertar el directorio ext / en la parte delantera de sys.path. Esto significa tanto ./manage.py runserver y ./manage.py shell recogerá el camino correcto:

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

Me parece que esto funciona muy bien si no quiere perder el tiempo con cosas como virtualenvs. Al implementar su proyecto tiene que asegurarse de que la ruta es correcta, así -. Por lo general solucionar esto mediante la adición de la misma línea sys.path.insert al inicio de mi archivo mod_wsgi app.wsgi

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top