Also versuche ich eine wiederverwendbare Django-App zu schreiben, die eine Methode zur Anzeige Ihres Twitter-Feeds auf Ihrer Seite bietet. Ich weiß gut, dass es bereits 20 mal existiert. Es ist eine akademische Übung. :)Fehler beim Importieren einer externen Bibliothek in die Django Template-Tag-Bibliothek
Directory-Struktur ist ziemlich einfach:
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
Wenn die Django-Shell ausgeführt wird, definiert die Funktionen in twitterfeed.py perfekt funktionieren. Ich glaube auch, dass ich die Template-Tags richtig benannt und registriert habe.
Wie Sie sehen können, verwende ich die ausgezeichnete Universal Feed Parser. Mein Problem liegt nicht in UFP selbst, aber in UFPs Unfähigkeit, beim Importieren der Vorlagen-Tag-Bibliothek aufgerufen zu werden. Als ich {% load twitterfeed %}
in base.py, ich die folgende Fehlermeldung erhalten:
'twitterfeed' is not a valid tag library: Could not load template library from django.templatetags.twitterfeed, No module named feedparser
ich importieren feedparser die folgende Anweisung:
import re, datetime, time, myapp.feedparser
Das Beste, was ich sagen kann, wird diese Fehlermeldung leicht täuschen. Ich denke, es gibt einen ImportError, wenn die Template-Bibliothek geladen wird, und das ist Djangos Interpretation davon.
Gibt es eine Möglichkeit, feedparser.py innerhalb meiner wiederverwendbaren App zu importieren, ohne dass die Benutzer der Anwendung feedparser irgendwo in ihrem PythonPath platzieren müssen?
Danke!
Danke Simon! Also ... es ist sicher zu sagen, dass es nicht möglich ist, auf eine Weise zu erreichen, dass die App-Portabilität erhalten bleibt? –
Ich würde nicht sagen, dass ... Sie können Abhängigkeiten innerhalb einer App definitiv einschließen (eher als ein ext/Verzeichnis), aber es kann ein bisschen fiddly sein, wie Sie von Ihrer Frage erfahren haben. Ich bin faul, also neige ich dazu, die ext/Methode zu benutzen, weil ich weiß, dass es funktioniert. –
Wenn Sie Apps direkt in die App einbinden, treten geringfügige Fehler auf: Sowohl das App-Verzeichnis als auch dessen Eltern befinden sich im Pfad. Daher ist es möglich, sie zweimal zu importieren, sowohl "mypackage.app" als auch "app". Es ist sicherer, es in ein Unterverzeichnis im Pfad zu stecken, daher gibt es nur einen möglichen Namen dafür ("app"). –