【发布时间】:2018-03-09 01:18:01
【问题描述】:
我正在尝试使用实时搜索功能,只要您在搜索框中输入内容,结果就会自动显示在下方。我一直在关注this tutorial,但没有运气。当我键入查询时,似乎什么也没发生。
谁能告诉我我做错了什么?
urls.py
urlpatterns = [
url(r'^$', views.list_of_post, name='list_of_post'),
[...]
url(r'^search/$', views.search_titles),
]
# this is my blog app views. Original view contains
# url(r'^blog/', include('blog.urls', namespace='blog', app_name='blog')),
views.py
# Main view that displays all my posts
def list_of_post(request):
post = Post.objects.filter(status='published')
categories = Category.objects.all()
template = 'blog/post/list_of_post.html'
context = {
'posts': posts,
'categories': categories,
[...]
}
return render(request, template, context)
# View that should return my results?
def search_titles(request):
if request.method == 'POST':
search_text = request.POST['search_text']
else:
search_text = ''
classes = Post.objects.filter(title__contains=search_text)
return render_to_response('blog/ajax_search.html', {'classes': classes})
模板
<h3>Search</h3>
{% csrf_token %}
<input type="text" id="search" name="search"/>
<ul id="search-results">
</ul>
ajax_search.html
{% if classes %}
{% for class in classes %}
<p>{{ class.title }}</p>
{% endfor %}
{% else %}
<p>No classes found.</p>
{% endif %}
最后是 ajax.js
$(function() {
$('#search').keyup(function() {
$.ajax({
type: "POST",
url: "blog/search/",
data: {
'search_text' : $('#search').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success: searchSuccess,
dataType: 'html'
});
});
});
function searchSuccess(data, textStatus, jqXHR)
{
$('#search-results').html(data)
}
我的所有文件都已正确加载,快速控制台检查确认 ajax.js 和 jquery 正在加载且没有错误。当我在搜索框中输入任何内容时,下方不会出现任何内容。我非常一致地遵循本教程,我看不出我可能哪里出错了。如果有人可以提供帮助,将不胜感激!
【问题讨论】:
-
你的 Ajax 调用的
url值可能需要一个前导斜杠:url: "/blog/search/" -
我刚试了一下,还是一样的结果,我在搜索框里写什么都没有。
-
你能用 'search/$' 代替 '^search/$'
-
试过了,还有很多其他的变种,只是为了确定,没有任何改变
-
是的,您需要进行一些调试。是否正在进行 Ajax 调用? Django 收到了吗?它是否被路由到正确的视图?该视图是否返回正确的响应?成功回调是否接收到预期的数据?
标签: jquery ajax django django-templates django-views