Ich bin neu in Django und versuche es durch ein einfaches Projekt namens "Dubliner" und eine App namens "Buch" zu lernen. Die Verzeichnisstruktur sieht folgendermaßen aus:
dubliners/book/ [includes models.py, views.py, etc.]
dubliners/templates/book/
Ich habe eine JPG-Datei, die in der Kopfzeile jeder Webseite angezeigt werden muss. Wo soll ich die Datei speichern? Welchen Pfad sollte ich für das Tag verwenden, um es mithilfe einer Vorlage anzuzeigen? Ich habe verschiedene Orte und Wege ausprobiert, aber bisher funktioniert nichts.
...
Vielen Dank für die unten stehende Antwort. Ich habe jedoch sowohl relative als auch absolute Pfade zum Bild ausprobiert und es wird immer noch ein fehlerhaftes Bildsymbol auf der Webseite angezeigt. Wenn ich beispielsweise ein Bild in meinem Ausgangsverzeichnis habe und dieses Tag in meiner Vorlage verwende:
<img src="/home/tony/london.jpg" />
Das Bild wird nicht angezeigt. Wenn ich die Webseite jedoch als statische HTML-Datei speichere, werden die Bilder angezeigt, sodass der Pfad korrekt ist. Vielleicht zeigt der mit Django gelieferte Standard-Webserver Bilder nur an, wenn sie sich auf einem bestimmten Pfad befinden?
Versuche dies,
settings.py
# typically, os.path.join(os.path.dirname(__file__), 'media') MEDIA_ROOT = '<your_path>/media' MEDIA_URL = '/media/'
urls.py
urlpatterns = patterns('', (r'^media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': settings.MEDIA_ROOT}), )
.html
<img src="{{ MEDIA_URL }}<sub-dir-under-media-if-any>/<image-name.ext>" />
Vorbehalt
In acht nehmen! Mit using
Context()
erhalten Sie einen leeren Wert für{{MEDIA_URL}}
. Sie müssenRequestContext()
stattdessen verwenden.Ich hoffe, das wird helfen.
quelle
{'document_root': settings.MEDIA_ROOT}
, ist das der Kontext, der für die aufgerufene Funktion bereitgestellt wird?Ich verstehe, dass Ihre Frage sich auf in MEDIA_ROOT gespeicherte Dateien bezog, aber manchmal kann es möglich sein, Inhalte statisch zu speichern, wenn Sie nicht mehr planen, Inhalte dieses Typs zu erstellen.
Möglicherweise ist dies ein seltener Fall, aber trotzdem - wenn Sie eine große Anzahl von "Bildern des Tages" für Ihre Site haben - und alle diese Dateien sich auf Ihrer Festplatte befinden?
In diesem Fall sehe ich keinen Widerspruch, um einen solchen Inhalt in STATIC zu speichern.
Und alles wird ganz einfach:
kopiert aus der offiziellen Django 1.4-Dokumentation / Integrierte Vorlagen-Tags und Filter
quelle
Ich habe zwei solide Tage damit verbracht, daran zu arbeiten, also dachte ich nur, ich würde auch meine Lösung teilen. Ab dem 26.11.10 ist der aktuelle Zweig 1.2.X, was bedeutet, dass Sie Folgendes in Ihrer settings.py haben müssen :
MEDIA_ROOT = "<path_to_files>" (i.e. /home/project/django/app/templates/static) MEDIA_URL = "http://localhost:8000/static/"
* (Denken Sie daran, dass sich in MEDIA_ROOT die Dateien befinden und MEDIA_URL eine Konstante ist, die Sie in Ihren Vorlagen verwenden.) *
Dann platzieren Sie in Ihrer url.py Folgendes:
import settings # stuff (r'^static/(?P<path>.*)$', 'django.views.static.serve',{'document_root': settings.MEDIA_ROOT}),
Dann können Sie in Ihrem HTML verwenden:
<img src="{{ MEDIA_URL }}foo.jpg">
Die Art und Weise, wie Django funktioniert (soweit ich das beurteilen kann, ist:
quelle
In der Entwicklung
Erstellen Sie in Ihrem App-Ordner den Ordnernamen 'static' und speichern Sie Ihr Bild in diesem Ordner.
So verwenden Sie das Bild:
<html> <head> {% load staticfiles %} <!-- Prepare django to load static files --> </head> <body> <img src={% static "image.jpg" %}> </body> </html>
In der Produktion:
Alles wie in der Entwicklung, fügen Sie einfach ein paar weitere Parameter für Django hinzu:
add in settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static/")
(dies bereitet einen Ordner vor, in dem statische Dateien aller Apps gespeichert werden)Stellen Sie sicher, dass Ihre App in ist
INSTALLED_APPS = ['myapp',]
in terminall Startbefehl Python manage.py collectstatic (dies wird Kopie der statischen Dateien aus allen Anwendungen, die in INSTALLED_APPS globalen statischen Ordner machen - STATIC_ROOT Ordner)
Das ist alles , was Django Notwendigkeit, danach müssen Sie einige Web - Server - Seite Setup zu machen machen Voraussetzungen für die Verwendung eines statischen Ordners. ZB in apache2 in der Konfigurationsdatei httpd.conf (für Windows) oder sites-enabled / 000-default.conf. (unter Virtual Site-Teil der Site für Linux) Hinzufügen:
Alias \ static "path_to_your_project \ static"
Benötigen Sie alles gewährt
Und das ist alles
quelle
settings.py
Datei ordnungsgemäß konfiguriert werden. Lesen Sie die Dokumente{% load static %}
.Wenn Ihre Datei ein Modellfeld innerhalb eines Modells ist, können Sie auch ".url" in Ihrem Vorlagen-Tag verwenden, um das Bild abzurufen.
Zum Beispiel.
Wenn dies Ihr Modell ist:
class Foo(models.Model): foo = models.TextField() bar = models.FileField(upload_to="foo-pictures", blank = True)
Übergeben Sie das Modell in Ihren Ansichten im Kontext.
return render (request, "whatever.html", {'foo':Foo.objects.get(pk = 1)})
In Ihrer Vorlage könnten Sie haben:
<img src = "{{foo.bar.url}}">
quelle
Verzeichnis / media unter dem Projektstamm
Settings.py
BASE_DIR = os.path.dirname(os.path.dirname(__file__)) MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
urls.py
urlpatterns += patterns('django.views.static',(r'^media/(?P<path>.*)','serve',{'document_root':settings.MEDIA_ROOT}), )
Vorlage
<img src="{{MEDIA_URL}}/image.png" >
quelle
Ihre
<img src="/home/tony/london.jpg" />
funktioniert für eine HTML-Datei, die von der Festplatte gelesen wird, da davon ausgegangen wird, dass die URL lautet
file:///home/...
. Für eine Datei, die von einem Webserver bereitgestellt wird, wird die URL wie folgt: Dieshttp://www.yourdomain.com/home/tony/london.jpg
kann eine ungültige URL sein und nicht das, was Sie wirklich meinen.In diesem Dokument erfahren Sie, wie Sie Ihre statischen Dateien bereitstellen und wo sie abgelegt werden . Wenn Sie den Entwicklungsserver von django verwenden, möchten Sie ihm grundsätzlich den Ort anzeigen, an dem sich Ihre Mediendateien befinden, und dann
urls.py
diese Dateien bereitstellen (z. B. mithilfe eines/static/
URL-Präfixes).Sie müssen so etwas in Ihre
urls.py
:(r'^site_media/(?P<path>.*)$', 'django.views.static.serve', {'document_root': '/path/to/media'}),
In der Produktionsumgebung möchten Sie dies überspringen und Ihren http-Server ( Apache , LightTPD usw.) dazu bringen, statische Dateien bereitzustellen .
quelle
Ein anderer Weg, es zu tun:
MEDIA_ROOT = '/home/USER/Projects/REPO/src/PROJECT/APP/static/media/' MEDIA_URL = '/static/media/'
Dazu müssten Sie Ihren Medienordner in ein Unterverzeichnis eines statischen Ordners verschieben.
Dann können Sie in Ihrer Vorlage Folgendes verwenden:
<img class="scale-with-grid" src="{{object.photo.url}}"/>
quelle
Ich habe verschiedene Methoden ausprobiert, es hat nicht funktioniert. Aber das hat funktioniert. Ich hoffe, es wird auch für Sie funktionieren. Die Datei / das Verzeichnis muss sich an folgenden Speicherorten befinden:
projec / your_app / templates project / your_app / static
settings.py
import os PROJECT_DIR = os.path.realpath(os.path.dirname(_____file_____)) STATIC_ROOT = '/your_path/static/'
Beispiel:
STATIC_ROOT = '/home/project_name/your_app/static/' STATIC_URL = '/static/' STATICFILES_DIRS =( PROJECT_DIR+'/static', ##//don.t forget comma ) TEMPLATE_DIRS = ( PROJECT_DIR+'/templates/', )
proj / app / templates / filename.html
im Körper
{% load staticfiles %} //for image img src="{% static "fb.png" %}" alt="image here" //note that fb.png is at /home/project/app/static/fb.png
Wenn sich fb.png in /home/project/app/static/image/fb.png befand, dann
img src="{% static "images/fb.png" %}" alt="image here"
quelle
Wenn Sie in Ihrem Django-Projekt die Adresse des Online-Bildes angeben, funktioniert dies. das funktioniert bei mir. Du solltest einen Schuss machen.
quelle