使用模态对话框和使用Ajax时,我得到KeyError (Exception Value: 'request)
。
这是我的设置:
当有人点击某个链接时,会有一个ajax调用运行一个函数来查询名为part的对象:
<script type="text/javascript">
$(document).ready(function() {
$(document).on("click", ".lib", function () {
var id = $(this).attr("id");
$.get("/models/"+id+"/viewmodelinfo/", function(data) {
$(".modal-body").html(data);
$('#mySymModal').modal('show');
});
});
});
</script>
以下是查询零件对象的函数:
def viewmodelinfo(request, model_id):
part = Part.objects.get(id=model_id)
return render_to_response("models/viewmodelmodal.html", {"part": part })
这会发回html数据,这些数据会在我的模态对话框的modal-body
div中被替换。
这一切都很好,除了我在viewmodelmodal
模板中有以下代码行之外:
{% comments part %}
在这种情况下,我得到KeyError
。
这是追溯:
回溯:
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "/Users/user1/Desktop/store/models/views.py" in viewmodelinfo
467. return render_to_response("models/viewmodelmodal.html", {"part": part })
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/shortcuts/__init__.py" in render_to_response
20. return HttpResponse(loader.render_to_string(*args, **kwargs), **httpresponse_kwargs)
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
171. return t.render(Context(dictionary))
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/template/base.py" in render
140. return self._render(context)
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/test/utils.py" in instrumented_test_render
62. return self.nodelist.render(context)
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/template/base.py" in render
823. bit = self.render_node(node, context)
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/template/debug.py" in render_node
74. return node.render(context)
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/template/base.py" in render
1178. _dict = func(*resolved_args, **resolved_kwargs)
File "/Users/user1/Desktop/store/apps/threadedcomments_extras/templatetags/comments_tag.py" in comments
13. "request": context["request"],
File "/Users/user1/Desktop/myenv2/lib/python2.7/site-packages/django/template/context.py" in __getitem__
54. raise KeyError(key)
Exception Type: KeyError at /models/384/viewmodelinfo/
Exception Value: 'request'
此评论适用于我使用它的其他任何地方。这让我觉得我应该包括一些我缺少的东西。有什么想法吗?
答案 0 :(得分:0)
如果我理解正确,您希望使用来自服务器的新数据重新加载div。没有页面刷新。我有几乎相同的问题。如果您使用django-mptt
,则重新加载mptt tag
会有点棘手。
我不了解您的模型和视图架构,但有一种方法可以帮助您解决这个问题,即将html
保留在另一个单独的html中的recursetree
或其他的jQuery's
文件。并在执行ajax或post函数时通过load
$('#pre_comments').load('comments_div.html #comments');
函数将其加载到div中。
comments
此代码将comments_div.html
中ID为pre_comments
的所有div加载到当前页面的data.part
div中。
因此,请使用comments_div.html页面保存并阅读您的视图。您可以将其内容加载到yor模态中。
如果我错了这个问题,我很抱歉。
注意:如果需要更多代码或说明,请随时说出来。
<强>更新强>
你可以像这样更新你的观点吗?然后使用def viewmodelinfo(request, model_id):
from django.core import serializers
part = Part.objects.get(id=model_id)
if part:
json = {part,}
data = serializers.serialize('json',json)
return HttpResponse(data)
return render_to_response("models/viewmodelmodal.html", {"part": part })
再次检查$ .get请求。
{{1}}
答案 1 :(得分:0)
好了很多搜索之后我找到了答案,这与在django自定义模板标签中访问请求有关....
您可以在此处看到答案:Access request in django custom template tags
我使用了以下内容:
from django.template import RequestContext
然后更改以下行:
return render_to_response("models/viewmodelmodal.html", {"part": part }),
context_instance = RequestContext(request))
我真的希望这有助于其他人! : - )