2017-12-23 4 views
1

Ich habe den folgenden Baum:Kann nicht eine statische JSON-Datei in Django analysieren 1.8

myDjangoSite/ 
    ... 
    myApp/ 
     ... 
     static/ 
      ... 
      myApp/ 
       myData.json 

Und ich habe diese view.py Datei:

import json 
from django.shortcuts import render 
from django.contrib.staticfiles.templatetags.staticfiles import static 


url = static('myApp/myData.json') 

json_data = open(url) 

def helloWorld(request): 

    return render(request, 'myApp/index.html') 

... und wenn ich auf diese Nachricht auf der Webseite zeigt der Browser:

IOError bei/ [Errno 2] Datei oder Verzeichnis: '/static/myApp/myData.json'

Ich verstehe nicht, warum es sagt "keine solche Datei oder Verzeichnis", wenn die Datei existiert und wie man es löst.

+0

Haben Sie konfigurieren Ihre statischen Dateien wie in [Django docs] (https beschrieben: //docs.djangoproject.com/de/2.0/howto/static-files/)? – Alp

+0

@alp, 'static' ist nicht dafür gedacht. Wissen Sie. – danihp

+0

@danihp gibt es irgendwelche Django-Dokumentation, die vorschlägt, statische Referenz von Server-Seite nicht zu verwenden? Oder soll es NUR auf der Client-Seite verwendet werden? Ich würde mich über jeden Hinweis freuen, weil ich mich nicht daran erinnern kann, etwas gelesen zu haben. Vielen Dank. – Alp

Antwort

3

Wenn Sie erstellen ein neues Projekt auf 1.8 Einstellung BASE_DIR var erstellt:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

verwenden var als Basis für Ihren Dateipfad:

>>> from django.conf import settings 
>>> import os 
>>> f=os.path.join(settings.BASE_DIR, 'myApp/static/myApp/myData.json') 
>>> f 
'/home/dani/tmp/ppdpd/p/myApp/myData.json' 
>>> json_data = open(f) 

Hinweis als static soll Holen Sie sich den Weg aus der Box-Clients, von der Navigator-Seite, aus der Ferne, aus dem Internet. Und nicht von deiner Server-Seite Django App.

Hinweis können Sie collectstatic aufrufen, wenn Sie Ihre App bereitstellen, dann der richtige Weg sein wird settings.STATIC_ROOT so etwas wie:

>>> f=os.path.join(settings.STATIC_ROOT, 'myApp/myData.json') 
Verwandte Themen