我的get_context_data在使用 Ajax 时没有将上下文正确传递给 HTML



我试图从HTML到Django CBV获取一个值,所以我使用了Ajax。通过代码self.request.GET.get('tab_keyword'),我从HTML中得到了一个值,并将其放入context['keyword']中。当我在 HTML 上使用 {{ 关键字 }} 检查值时,它什么也没显示。我还仔细检查tab_keyword在控制台上打印出一个值。

为了调试它,我手动将字符串值放入context['keyword']中,{{ 关键字 }} 正确显示我需要的内容。从调试中,我非常确定 HTML 中的self.request.GET.get('tab_keyword')或我的 Ajax 代码有问题。

谁能帮我解决这个问题?

def get_context_data(self, **kwargs):
context = super().get_context_data()
tab_keyword = self.request.GET.get('tab_keyword')
if self.request.is_ajax():
if tab_keyword == '#':
tab_keyword = None
else:
tab_keyword = None
context['keyword'] = tab_keyword 
return context

阿贾克斯

$('.load-more-btn').on('click', function(e) {
e.preventDefault()
$.ajax({
type: 'GET',
url: '/',
data: {
tab_keyword: '#' + $('.nav-link.active.show').html(),
csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val(),
},
success:function() {}
})
})

urls.py

url(r'^$', views.StoreListView.as_view(), name='index'),

你的ajax使用POST方法,那么你应该在get_context_data中使用tab_keyword = self.request.POST.get('tab_keyword')

如果我想从html获取tab_keyword到Django怎么办,我会建议如下:

view.py

def get_context_data(request):
tab_keyword = request.GET['tab_keyword']
# do something...
return JsonResponse(mydict)

希望它能有所帮助。

最新更新