我试图获得变量" segundos"通过详细信息视图中的GET,我试图通过方法得到它:
js文件:
$(document).ready(function(){
var segundos=340;
console.log(segundos);
$.ajax({
data : {'segundos':segundos},
url : '/ajax/puzzle-1/',
type : 'GET',
});
});
views.py
class PuzzleView(DetailView):
model = Puzzle
template_name = 'puzzle.html'
def get (self,request,*args,**kwargs):
seconds = request.GET["segundos"]
self.object = self.get_object()
ranking = Ranking.objects.create(puzzle_id=self.object.id,usuario=self.request.user,segundos=seconds,puesto=89)
context = self.get_context_data(object=self.object)
return self.render_to_response(context)
class RankingView(ListView):
model = Ranking
template_name = 'ranking.html'
queryset = Ranking.objects.filter(puzzle_id=1).order_by('segundos')[:3]
class PuzzleAjaxView(TemplateView):
template_name = 'ranking.html'
但我得到了着名的错误" MultiValueDictKeyError"。如果我尝试相同的方法"得到"但是使用TemplateView,我可以获取变量,但不能使用DetailView
以防万一,我的urls.py:
urlpatterns = patterns('puzzle.views',
url(r'^actividad/puzzle/(?P<slug>[-_\w]+)/$',PuzzleView.as_view(),name='puzzle'),
url(r'^ajax/puzzle-1/.*$', PuzzleAjaxView.as_view(),name='ajax'),
url(r'^ranking/.*$', RankingView.as_view(),name='ranking'),
)
答案 0 :(得分:3)
seconds = request.GET("segundos")
您无法拨打GET
MultiValueDict
。您必须通过字典查找进行访问。它是dict
。
request.GET.get('segundos')
request.GET['segundos']
为了将来参考,您的异常回溯可以解释所有这些,但错误消息应该非常清楚:segundos
中的某些内容不是MultiValueDict
中的有效密钥。< / p>
我假设您的PuzzleView
(您称之为DetailView
)永远不会传递任何GET参数,因为您的示例仅显示您的AJAX调用GET参数,该调用映射到您的{{1} (你称之为PuzzleAjaxView
根据您的观看类是TemplateView
还是get
的事实,确定您的TemplateView
功能是否有效的决定因素是什么?&#39;事实上DetailView
只传递给你的AJAX视图。
换句话说..任何视图(segundos
,无关紧要)通过直接查找TemplateView, DetailView
访问GET
dict将失败,如果该获取参数不是&#39;传入。