Frage

Daher versuche ich, eine wiederverwendbare Django -App zu schreiben, die eine Methode zum Anzeigen Ihres Twitter -Feeds auf Ihrer Seite bietet. Ich weiß gut, dass es bereits 20 Mal existiert. Es ist eine akademische Übung. :)

Verzeichnisstruktur 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

Beim Ausführen der Django -Shell funktionieren die in Twitterfeed.py definierten Funktionen perfekt. Ich glaube auch, dass ich die Template -Tags ordnungsgemäß benannt und registriert habe.

Wie Sie sehen können, benutze ich das ausgezeichnete Universal Feed Parser. Mein Problem liegt nicht in UFP selbst, sondern in der Unfähigkeit von UFP, beim Importieren der Vorlagen -Tag -Bibliothek aufgerufen zu werden. Wenn ich {% load twitterfeed %} In Base.py erhalte ich den folgenden Fehler:

'TwitterFeed' ist keine gültige Tag -Bibliothek: Es konnte keine Vorlagenbibliothek von django.templatetags.twitterfeed, kein Modul namens FeedParser

Ich importiere FeedParser mit der folgenden Anweisung:

import re, datetime, time, myapp.feedparser

Das Beste, was ich beurteilen kann, ist diese Fehlermeldung leicht täuscht. Ich denke, es gibt einen Importeur, wenn die Vorlagenbibliothek geladen ist, und dies ist Djangos Interpretation davon.

Gibt es eine Möglichkeit, FeedParser.py in meine wiederverwendbare App importieren zu können, ohne dass Benutzer der App FeedParser irgendwo in ihrem Pythonpath platzieren können?

Vielen Dank!

War es hilfreich?

Lösung

Dies sieht aus wie eines dieser nervigen relativen Pfadprobleme - gelöst in Python 2.6 und höher (wo Sie importieren können. Eine billige und fröhliche Möglichkeit, dies zu beheben

Andere Tipps

Ich lösen diese Art von Problem (Versandbibliotheken, die Abhängigkeiten für mein Gesamtprojekt sind) auf folgende Weise. Zunächst erstelle ich ein "ext" -Verbild in der Wurzel meines Projekts (in Ihrem Fall wäre das myproject/ext). Dann platziere ich Abhängigkeiten wie FeedParser in dieses EXT -Verzeichnis - myproject/ext/feedparser

Schließlich ändere ich mein Skript verwalten.py, um das EXT/ Directory an der Vorderseite des Sys.Paths einzufügen. Das bedeutet beides ./manage.py runserver und ./manage.py shell wird den richtigen Weg aufnehmen:

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

Ich finde, das funktioniert sehr gut, wenn Sie sich nicht mit Dingen wie Virtualenvs herumspielen möchten. Wenn Sie Ihr Projekt bereitstellen, müssen Sie auch sicherstellen sys.path.insert Zeile zum Start meiner mod_wsgi App.wsgi -Datei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top