質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

3993閲覧

DjangoでjQueryUIのautocompleteを使いたい

am120sec

総合スコア14

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2017/08/13 11:09

index.htmlの検索フォームで、DB内にあるタイトルをautocompleteで表示させたいです。

値はすでにindex.titleに格納しています。
aaaa
bbbb
cccc

こちらの参考サイトから以下のようなコードを作成しましたが、当該のエラーが発生している状況となります。

ajaxやjQueryの実装は今回が初めてなので、まだ多くの間違いがあるかもしれません・・・。
気になる点や、間違いをご指摘お願いします。

エラー↓

Internal Server Error: /api/get_titles/ Traceback (most recent call last): File "/home/vagrant/.pyenv/versions/3.6.0/lib/python3.6/site-packages/django/core/handlers/exception.py", line 41, in inner response = get_response(request) File "/home/vagrant/.pyenv/versions/3.6.0/lib/python3.6/site-packages/django/core/handlers/base.py", line 198, in _get_response "returned None instead." % (callback.__module__, view_name) ValueError: The view app.views.get_titles didn't return an HttpResponse object. It returned None instead. [13/Aug/2017 14:12:31] "GET /api/get_titles/?term=aaa HTTP/1.1" 500 14395

作成したコード↓

django

1#model.py 2from django.db import models 3class Index(models.Model): 4 title = models.CharField(max_length=30) 5 def __str__(self): 6 return self.title

django

1#views.py 2from django.shortcuts import render,redirect,render 3from .models import Title_Post 4from django.http import HttpResponse 5import json 6 7def index(request): 8 return render(request, 'app/index.html') 9 10def get_titles(request): 11 if request.is_ajax(): 12 q = request.GET.get('term', '') 13 titles = Index.objects.filter(title__icontains = q )[:10] 14 results = [] 15 for title in titles: 16 title_json = {} 17 title_json = title.title 18 results.append(title_json) 19 data = json.dumps(results) 20 else: 21 data = 'fail' 22 mimetype = 'application/json' 23 return HttpResponse(data, mimetype)

django

1#urls.py 2from django.conf.urls import include, url 3from app import views 4 5app_name = 'app' 6 7urlpatterns = [ 8 url(r'^$', views.index, name='index'), 9 url(r'^api/get_titles/', views.get_titles, name='get_titles'),

html

1<!-->index.html<--> 2<head> 3 <meta charset=utf-8 /> 4 <link rel="stylesheet" href="http://code.jquery.com/ui/1.8.18/themes/base/jquery-ui.css" type="text/css" media="all" /> 5 <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script> 6 <script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js" type="text/javascript"></script> 7 <script> 8 $(function() { 9 $("#titles").autocomplete({ 10 source: "/api/get_titles/", 11 minLength: 1, 12 }); 13 }); 14 </script> 15</head> 16 17<div class="ui-widget"> 18 <label for="titles">Title: </label> 19 <input id="titles"> 20</div>

以上、よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

HttpResponse オブジェクトを返していないので遭遇されたようなエラーが表示されています。

Python

1def get_titles(request): 2 if request.is_ajax(): 3 q = request.GET.get('term', '') 4 titles = Index.objects.filter(title__icontains = q )[:10] 5 results = [] 6 for title in titles: 7 title_json = {} 8 title_json = title.title 9 results.append(title_json) 10 data = json.dumps(results) 11 else: 12 data = 'fail' 13 mimetype = 'application/json' 14 return HttpResponse(data, mimetype)

この関数では is_ajax の時に 何も return していません。つまり Noneが return されているのと同義です。最後の2行を if文の外に出してあげるのが本来やりたいことかと思います。参考URLのコードもそのようになってるはずですので確認してみてください。

else: data = 'fail' # この2行を if文から外に出す mimetype = 'application/json' return HttpResponse(data, mimetype)

投稿2017/08/13 11:17

編集2017/08/13 11:18
tell_k

総合スコア2120

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

am120sec

2017/08/13 13:31

正常に動作しました・・・、圧倒的感謝です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問