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