gpt4 book ai didi

javascript - 使用 Django 基于类的 View 处理 AJAX 时遇到问题

转载 作者:行者123 更新时间:2023-11-28 08:58:35 25 4
gpt4 key购买 nike

我一直在尝试将代码从基于 Django 函数的 View 切换到基于类的 View ,但我无法理解如何在 Django CBV 中处理 AJAX。

例如,假设我的 Django 博客项目中有此实时搜索功能。(抱歉,我试图让它尽可能简单。)

urls.py

url(r'^search/$', search_page),

forms.py

class SearchForm(forms.Form):
query = forms.CharField()

整个搜索页面.html

<form id="search-form" method="get" action=".">
{{form.as_p}}
<input type="submit" value="search" />
</form>

<div id="search-results">
{% include "just_the_result.html" %}
</div>

just_the_result.html

{% for post in post_list %}
<li>{{ post.title }}</li>

views.py

def search_page(request):
form = SearchForm()
post_list = []

if 'query' in request.GET:
form = SearchForm({'query': query})
post_list = Post.objects.filter(title__icontains=query)

if request.GET.has_key('ajax'):
variables = RequestContext(request, {
'post_list': post_list,
})
return render_to_response('just_the_result.html', variables)
else:
variables = RequestContext(request, {
'form': form,
'post_list': post_list,
})
return render_to_response('entire_search_page.html', variables)

search.js

$(document).ready(function() {
$("#search-form").submit(search_submit);
});

function search_submit() {
var query = $("#id_query").val();

$("#search-results").load(
"/search/?ajax&query=" + encodeURIComponent(query)
);

return false;
}

所以基本上,当请求正常时,我会显示整个搜索页面,而如果请求是 AJAX,则仅显示“just_the_result.html”。当我运行服务器时,这工作正常,但我想将此 View 更改为基于类的 View 。

这是我到目前为止所拥有的:

views.py

class PostSearch(ListView):
model = Post
template_name = 'app_blog/search.html'
context_object_name = 'post_list'

def get_queryset(self):
queryset = super(PostSearch, self).get_queryset()

query = self.request.GET.get('query')
if query:
return queryset.filter(title__icontains=query)
else:
return queryset

我猜当请求正常时这可以正常工作。但是,当请求是 AJAX 请求时,我不知道该怎么办!在基于函数的 View 中,我可以根据请求是否为 AJAX 返回不同的模板和变量,但我认为这在 CBV 中没有必要甚至不可能。另外,还有一个问题。我最近一直在阅读有关 RESTful 设计的内容。我上面的代码被认为是“RESTful”吗?我无法理解 REST API 的确切使用方式。

最佳答案

关于javascript - 使用 Django 基于类的 View 处理 AJAX 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18094473/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com