Frage

Entschuldigung, meine Frage ist sehr einfach, ich möchte ein Bild auf der Vorlagenseite anzeigen. Ich arbeite für es, das Bild zeigt nicht. Ich erstelle ein neues Projekt SecondPrjt, es gibt nur eine Ansichtsfunktion namens 'Index' und eine Vorlage mit dem Namen namen test.html und erstellen Sie einen Ordner namens static im Side Secondprjt -Ordner und erstellen Sie Ordnerbilder und platzieren Sie alle benötigten Bilder dort
URLS.PY:

urlpatterns = musters ('',
# Beispiele:
# URL (r '^$', 'Secondprjt.views.home', name = 'home'),
(r '^$', 'Views.Index'),
......... )

urlpatterns += staticFiles_urlpatterns ()

Ansichten.Pyaus django.shortcuts import Render_to_response
Def Index (Anfrage):
return render_to_response ('test.html')


test.html:
img src = "{{static_url}} bilder/img03.jpg" width = "186" height = "186"

Einstellungen.Py


Static_root = "c:/wamp/www/secondprjt/static"
Static_url = '/static/' '
StaticFiles_dirs = ("C:/wamp/www/secondprjt/static",),)
StaticFiles_finders = ('django.contrib.staticFiles.finders.Filesystemfinder', 'django.contrib.staticFiles.finders.appdirectoriesFinder',

)
Installed_apps = ((
-----
'django.contrib.staticFiles',
---- )

Kann jemand vorschlagen, was mit mir los ist.Notizich benutze Fenster und Django1.3 und Verwenden von Development Server. Vielen Dank im Voraus
Ich bekam die folgenden, nachdem ich angefordert hatte http://127.0.0.1:8000/ im Durchsuchen
C: wamp www SecondPrjt> Python Management.py RunServer Validating Modelle ...

0 Fehler gefundene Django Version 1.3, die Einstellungen 'SecondPrjt.Settings' Development Server verwendet, wird ausgeführt. http://127.0.0.1:8000/Beenden Sie den Server mit Strg-Break. [05/SEP/2011 15:18:24] "Get/http/1.1" 200 89 [05/SEP/2011 15:18:24 "Get /images/img03.jpg http/1.1" 404 2028

War es hilfreich?

Lösung

Höchstwahrscheinlich ist Ihr Problem, dass Sie absolute URLs in beiden verwendet haben STATIC_ROOT und STATICFILES_DIRS.

Wenn Sie absolute URLs in jedes statische Dire einbeziehen möchten (es fühlt sich wie ein Hack an, aber es ist in Ordnung, da Sie immer nur verwenden sollten staticfiles_urlpatterns() in der Entwicklung) können Sie das Problem beheben, indem Sie einfach einstellen STATIC_ROOT = ''.

Bearbeiten: Sieht so aus, als wäre das nicht dein einziger Fehler. Wenn Sie sich Ihre Debug -Ausgabe ansehen, werden Sie außerdem etwas Seltsames über das 404 bemerken - es kommt von von /images/img03.jpg. Wenn Sie sich erinnern, haben Sie versucht, sich anzuhängen {{ STATIC_URL }} dazu hätte es sein sollen /static/images/img03.jpg.

Dies liegt daran, dass bei der Verwendung render_to_response, Sie übergeben niemals einen Kontext (daher hat die Vorlage niemals Zugriff auf STATIC_URL - Es denkt, es ist leer (daher, warum du das nicht gesehen hast /static/ als Teil der Bild -URL. Wann immer Sie verwenden möchten IRGENDEIN Kontext, Sie MUSS Gib es an die Vorlage. In diesem Fall sollten Sie verwenden [RequestContext].

Daher müssen Sie sicherstellen, dass Sie hinzugefügt haben django.core.context_processors.static zu TEMPLATE_CONTEXT_PROCESSORS in Einstellungen.Py. Du solltest benutzen render_to_response folgendermaßen:

def index(request):
    return render_to_response('test.html', context_instance=RequestContext(request))


Das Folgende ist eine Erklärung dafür, welche Kontextprozessoren sind:

Im Einstellungen.Py, Sie hätten dann so etwas wie:

 TEMPLATE_CONTEXT_PROCESSORS = (
     'constant_context_processor.constants',
     'django.core.context_processors.static',
     'django.contrib.auth.context_processors.auth',
     'django.core.context_processors.debug',
     'django.core.context_processors.i18n',
     'django.core.context_processors.media',
     'django.core.context_processors.request', )

Der wichtige Teil hier ist, dass Sie haben django.core.context_processors.static. In Django ist ein Kontextprozessor eine Funktion, die einen Kontext -Diktat zurückgibt. Zum Beispiel verwende ich in meinen Django -Projekten häufig den folgenden Code -Snippet:

Constant_context_processor.py:

import settings
def constants(request):
    return {
           'CONSTANTS': settings.CONSTANTS,
    }

(Sie werden das oben in feststellen Einstellungen.Py, Ich benutzte constant_context_processor.constants als einer der Kontextprozessoren). Dies ermöglicht es mir, Konstanten in zu definieren Einstellungen.Py und sie in meinen Vorlagen zu verwenden, zum Beispiel als so etwas wie {{ CONSTANTS.favicon_url }}.

Wie Sie sehen können, der Vorteil für Kontextprozessoren und die Verwendung RequestContext Ist dieser Kontext, den Sie im Allgemeinen in Ihren Vorlagen benötigen, automatisch hinzugefügt, sodass Sie in jeder Ansicht ein Wörterbuch Ihres Kontexts manuell manuell bevölkern müssen. Django weiß, dass es bestimmte Variablen gibt, auf die Sie normalerweise in Ihren Vorlagen zugreifen möchten, damit sie sie über ihre Kontextprozessoren zugänglich machen (also erhalten Sie django.core.context_processors.request Ihnen Zugriff auf eine bestimmte Anfrage, Its und Post und Post und Post und Post Parameter und alle Arten von Metadaten aus einer Vorlage, was häufig nützlich ist, wenn Sie beispielsweise den Inhalt basierend auf den GET -Parametern variieren).

In Ihrem Fall wollten Sie nicht viel Kontext verwenden, aber Sie wollten ein wenig verwenden ({{ STATIC_URL }}), also brauchst du mindestens django.core.context_processors.static.

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