2016-06-28 9 views
0

Ich mache Django App, in der ich viele externe HTML-Dateien in die Vorlage einbetten muss. Jede HTML-Datei wird zusammen mit dem Unterverzeichnis, das alle Bilder enthält, in einem eigenen Verzeichnis gespeichert. Die Dateistruktur:Externe HTML-Datei in Django

Abstract1 
    Pictures 
     image1.png 
     image2.png 
    abstract1.html 

Ich verwende ein benutzerdefiniertes Template-Tag zum Einbetten (siehe unten). Mein Problem: Die HTML-Dateien werden geladen, aber verknüpfte Ressourcen (z. B. img) funktionieren nicht ordnungsgemäß (d. H. Sie werden nicht angezeigt). HTML-Dateien verwenden relative URLs, die zusammen mit dem Basispfad der Django-Vorlage eine ungültige URL erzeugen, aber selbst wenn ich fest codierte absolute URLs verwende, bleibt das Problem bestehen. Ich habe das Gefühl, etwas Offensichtliches zu vermissen. Gibt es einen geeigneten (oder nicht richtigen, aber funktionierenden) Weg, um ein solches Problem zu überwinden?

Vorlage

{% load abstracts_extras %} 

<!DOCTYPE html> 
<html> 
    <body style="margin-left:10px"> 
     <h2>{{abstract}}</h2> 
     <b>Authors:</b><br/> 
     <ul> 
      {% for author in authors %} 
       <li>{{author}}</li> 
      {% endfor %} 
     </ul> 
     <p> 
     <b>Title: </b>{{abstract.title}} 
     <p> 
     <hr> 

     {% include_external filename|add:'.html' %} 
    </body> 
</html> 

abstracts_extras

from django.template import Library 

register = Library() 

def include_external (url): 
    url = 'file:///' + url 
    import urllib2 
    return urllib2.urlopen (url).read() 
+0

Ich kann nicht verstehen, warum Ihr Vorlagen-Tag die externen Vorlagen über urllib2 mit einer 'file: ///' URL lädt, sondern nur als lokale Dateien öffnet. –

+0

Ich kann auch nicht verstehen, worüber du verwirrt bist; Ihre statischen Dateien müssen sich an einem Ort befinden, an dem sie vom statischen Server bereitgestellt werden, und die URLs im HTML müssen auf die statische URL verweisen. –

Antwort

0

Wenn ich gut bin zu verstehen, laden Ihre Vorlagen aber nicht statisch wie img. Es wäre ein Konfigurationsfehler. Sie sollten sowohl settings.py für Django als auch httpd.conf für Apache überprüfen und überprüfen, ob statische Dateien richtig konfiguriert sind. Haben Sie einen Fehler angezeigt oder sind nur Bilder nicht geladen (aber kein Fehler)?

+0

Es wird kein Fehler angezeigt. In der Konsole: Fehler beim Laden der Ressource: Der Server reagierte mit dem Status 404 (NOT FOUND) Ich benutze derzeit den Entwicklungsserver, also ist es kein Apache-Fehler – user1785295

+0

Warum nicht externe HTML-Links in einen Iframe einbetten und laden es tut eher dann mit include_extras – burning

+0

Vielleicht sollten Sie überprüfen, zuerst dies in Ihrem Django-Projekt testen, um Ihre Einstellung zu überprüfen. Wenn du es dann aus deinem Projekt entfernst, bin ich mir ziemlich sicher, dass du den Pfad deiner Verzeichnisse in settings.py schreiben solltest, um 404 zu vermeiden. – Gaetan