【发布时间】:2014-10-07 01:00:27
【问题描述】:
我一直在关注本教程: https://www.youtube.com/watch?v=jKSNciGr8kY
我完全被卡住了,我已经逐行检查了我的代码,但仍然无法找出问题所在。每当我搜索文件时,它总是返回 No Documents available!!而不是我正在搜索的文档。
这是它的视图:
def search(request):
if request.method == 'POST':
search_text = request.POST['search_text']
else:
search_text = ''
if search_text:
documents = Document.objects.filter(document_subject__contains=search_text, approved=True)
else:
documents = False
return render(request,'ajax_search.html',{'documents':documents})
这是我的 ajax_search 模板:
{% if documents.count > 0 %}
{% for document in documents %}
<li><a href="/main/get/{{ document.id }}/">{{ document.document_subject }}</a></li>
{% endfor %}
{% else %}
<li> None to show!!</li>
{% endif %}
我的 ajax 文件:
$(function (){
$('#search').keyup(function(){
$.ajax({
type: 'POST',
url: '/main/search/',
data: {
'search_text' : $('#search').val(),
'csrfmiddlewaretoken' : $("input[name=csrfmiddlewaretoken]").val()
},
success: searchSuccess,
dataType: 'html'
});
});
});
function searchSuccess(data, textStatus, jqXHR)
{
$('#search-results').html(data);
}
这是在我的 base.html 文件中:
<script type="text/javascript" src="{{ STATIC_URL }} /static/jquery-2.1.1.min.js"> </script>
<script type="text/javascript" src="{{ STATIC_URL }} /static/ajax.js"></script>
我的文档模型:
class Document(models.Model):
docfile = models.FileField(upload_to='documents/%Y/%m/%d')
document_subject = models.CharField(max_length=255)
document_subject_number = models.PositiveIntegerField(max_length=999)
def __unicode__(self):
return self.document_subject
def get_absolute_url(self):
return "/main/get/%i/" %self.id
如果您有任何其他问题,请提前告诉我,谢谢,我是 python 和 django 的新手,所以我很感激任何反馈。提前致谢
搜索部分模板:
<ul>
<li><a href='/documents/all'>Documents</a></li>
<li><a href='documents/create'>Create Documents</a></li>
</ul>
<h3>Search</h3>
{% csrf_token %}
<input type ='text' id="search" name="search"/>
<ul id="search-results">
</ul>
【问题讨论】:
-
你需要做一些调试。例如,使用 Python 中的日志语句来确定它是否进入了“搜索”视图;如果它得到你期望的查询参数;或者如果它在那时返回任何文件。然后转到 Javascript,再次使用 console.log 来查找那里发生的事情。
-
很多可能的问题尝试查看是否正确执行了 javascript 在视图上打印 'search_text',只需在
if search_text:之前添加print search?text并检查终端中的输出 -
能否也粘贴模板的搜索部分?你的csrf真的在那里吗? firebug / 开发者工具的响应是什么?
-
谢谢我做了一些调试,我添加了模板的搜索部分。
标签: python ajax django django-templates