2017-06-28 9 views
0

DjangoとAjaxを使用してローカルデータベースからデータを取得しようとしています。 ユーザーがデータを取得できるビューを設定し、開始日、終了日、サイトIDなどのデータをフィルタリングする引数を渡すことができます。 基本的には、データをフィルタリングするためにviews.pyに引数を渡したいと思いますが、現時点では、jsonが返される限り、パラメータがURLに反映されているかどうかは気にしません議論 私は成功したデータベースからデータを取得することができれば私がテストしたとき、私はページが404エラーが見つかりません取得しています: ページが見つかりません(404) リクエスト方法: リクエストURLをGET:http://0.0.0.0:8000/acoustic_viz/get-data/?date_start=2016-10-28&date_end=2016-10-30&site_id=HENTONAOPURLに引数を渡してDjangoとAjaxを使ってローカルデータベースからデータを取得404エラー

エラー

acoustic_viz.urlsで定義されているのURLconfを使用して、Djangoはこの順で、これらのURLパターンを試してみました: ^管理/

^取得データ/

^/

0-サイトを取得します

^$

^静的/(?P。*)$

現在のURL、acoustic_viz/GET-データ/、これらのいずれにも一致しませんでした。

私は渡された議論のためですか?もしそうなら、どうすればDjangoが引数付きのURLを見つけることができるようにurls.pyを変更できますか?ここで

が私のコードである

acoustic_viz/index.htmlを

var dateStart = {key:'2016-10-28'}; 
var dateEnd = {key:'2016-10-30'}; 
var siteID = {key:'HENTONAOP'}; 


$("#test").on('click',function(){ 
    console.log("test"); 
    $.getJSON('/acoustic_viz/get-data/', 
      {date_start: dateStart.key, date_end:dateEnd.key, site_id: siteID.key })   
     // when the data comes back from the server 
     .done(function(data) { 
      console.log(data); 
     }); 
}); 

acoustic_viz/acoustic_viz/urls.py

from django.conf.urls import url 
from django.contrib import admin 
from django.conf import settings 
from django.conf.urls.static import static 
import queries.views 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^get-data/', queries.views.get_data), 
    url(r'^get-sites/', queries.views.get_sites), 
    url(r'^$', queries.views.hello_peeg), 
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

acoustic_viz /クエリ/ views.py

from django.shortcuts import render 

from django.http import HttpResponse 

from .models import Data, Sites 

import datetime 
import json 


class JSONResponse(HttpResponse): 
    """ 
    An HttpResponse that renders its content into JSON. 
    """ 
    def __init__(self, data, **kwargs): 
     content = json.dumps(data) 
     kwargs['content_type'] = 'application/json' 
     super(JSONResponse, self).__init__(content, **kwargs) 


class CSVResponse(HttpResponse): 
    """ 
    An HttpResponse that renders its contents as a CSV. 

    'rows' should be a list of dict objects, with each entry corresponding to 1 CSV field. 
    'fields' is the ordered list of field names in the CSV. 
    """ 
    def __init__(self, rows, fields, **kwargs): 

     csvfile = StringIO() 

     # Write header with field names 
     headerwriter = csv.writer(csvfile)  
     headerwriter.writerow(fields) 

     # Write CSV rows 
     writer = csv.DictWriter(csvfile, fields, extrasaction='ignore') 
     for row in rows: 
      writer.writerow(row) 


     kwargs['content_type'] = 'text/csv' 
     super(CSVResponse, self).__init__(csvfile.getvalue(), **kwargs) 
     self['Content-Disposition'] = 'attachment' 




def errorResponse(errormessage, format, extraJSON={}): 
    """ 
    A nice standardized way to show the user an error message. 
    """  

    if format == 'csv': 
     return CSVResponse(
      [{'errormessage': errormessage}], 
      fields=('errormessage',) ) 

    else: 
     json_objects = extraJSON.copy() 
     json_objects['error'] = True 
     json_objects['errormessage'] = errormessage 
     return JSONResponse(json_objects) 


def hello_peeg(request): 
    return HttpResponse('hello peeg') 

def get_sites(request): 
    sites = Sites.objects.all().order_by('int_id') 
    json_objects = [{'site': (s.site_id + ', ' + s.site_name)} for s in sites] 
    return JSONResponse({'sites': json_objects}) 

def get_data(request): 
    filtered = False 
    data = Data.objects.all().order_by('data_entry_id') 
    startDate = request.GET.get('date_start') 
    endDate = request.GET.get('date_end') 
    siteID = request.GET.get('site_id') 

    if startDate and endDate and siteID: 
     filtered = True 
     # __range: SELECT * WHERE date_recorded BETWEEN startDate and endDate; 
     data = Data.objects.filter(date_recorded__range=(startDate, endDate), site_id=siteID) 

    if not filtered: # error message if the user didn't supply an argument to filter the species list 
     json_objects = [{'data': (d.date_recorded+ ' ' + d.time_recorded+ ' ' + d.average)} for d in data] 
     #return errorResponse("Please supply a 'date_start', 'date_end', and 'site_id' argument.", format, {"data":[]}) 
    else: 
     json_objects = [{'data': (d.data_entry_id + ' ' + d.site_id + ' ' + d.date_recorded+ ' ' + d.time_recorded+ ' ' + d.average)} for d in data] 
     return JSONResponse({'data': json_objects}) 

これはmです最初にDjangoアプリケーションを作成しようとすると、どんな助けにも感謝します。

私はあなたがあなたがあなたなら、私に知らせてやる代わりにこの

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^get-data/', queries.views.get_data), 
    url(r'^get-sites/', queries.views.get_sites), 
    url(r'^$', queries.views.hello_peeg), 
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

のこの

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^get-data/$', queries.views.get_data), 
    url(r'^get-sites/$', queries.views.get_sites), 
    url(r'^$', queries.views.hello_peeg), 
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

を持っている必要があり$記号

であなたのURLパターンを終了するのを忘れたと思います

+1

ここで重要な問題は、「プロジェクトアプリ」を「プロジェクトのアプリ」として使用したことです。あなたはこれを行うことができますが、そのためURLのプレフィックスはありません。 [Djangoチュートリアル](https://docs.djangoproject.com/ja/1.11/intro/tutorial01/#creating-a-project)では、コンポーネントについて早い段階で説明しています。 – Melvyn

答えて

1

あなたは '/ acoustic_viz/get-data /'を開こうとしますが、urls.pyにはすべてのURLに接頭辞/acoustic_viz/がありません。index.htmlテンプレートファイル

$.getJSON('/get-data/') 

またはurls.pyファイル内のURLにacoustic_vizを追加するには、URLを変更しよう:

urlpatterns = [ 
url(r'^admin/', admin.site.urls), 
url(r'^acoustic_viz/get-data/', queries.views.get_data), 
url(r'^acoustic_viz/get-sites/', queries.views.get_sites), 
url(r'^$', queries.views.hello_peeg), 
]+ static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

また、あなたがDjangoのテンプレートにURLをハードコーディングする必要がいけないことに注意してください。あなたはURLに名前をつけて、urlというタグを使うことができます。

0

エラーが発生しました。

乾杯!

+0

前と同じエラーが出ましたが、問題を見つけました。ありがとう! – jhjanicki

関連する問題