修改django中的视图来处理ajax请求

时间:2013-11-20 13:36:02

标签: ajax django

我有一个简单的问题。我在django中有一个功能齐全的站点,它有一个标题,菜单和页脚,它永远不会改变,内容会发生变化。我的简化模板如下所示:
base.html

<html>
  ...header...
  <body>
    ...menu...
    {%block content%}{%endblock%}
    ...footer...
  </body>
</html>

和content.html

{%extends 'base.html'%}
{%block content%}...content according to selected menu item...{%endblock%}

到目前为止,一切正常。 现在我决定对于启用了javascript的用户,我可以添加ajax调用,所以每当他们点击上面的菜单项(将有onClick)时,只会升级“内容”块。我的问题是:我可以重用我的原始视图并以某种方式修改它以适应两种需要 - 常规调用和ajax调用?或者我应该以某种方式重新设计我的模板?或者我是否需要为每个人单独查看? 我的简化视图如下:

def main(request,site):
  ...some site processing...
  return render_to_response('content.html',{'content':...site content...})

谢谢

2 个答案:

答案 0 :(得分:0)

您可以在视图中查看ajax调用并给出相应的响应:

if request.is_ajax():
    #do something

看看这里:https://docs.djangoproject.com/en/dev/ref/request-response/#django.http.HttpRequest.is_ajax

希望这会导致正确的方向。

答案 1 :(得分:0)

我认为使用url方法中jquery.load()参数的方便功能比使用django模板和视图要容易得多。 jquery docs sais

  

.load()方法[...]允许我们指定一部分   要插入的远程文档。这是通过特殊的方式实现的   url参数的语法。如果有一个或多个空格字符   包含在字符串中,第一个字符串后面的字符串部分   假设space是一个确定内容的jQuery选择器   要加载。

在您的JavaScript事件处理程序中,您只需编写如下内容:

$('.content').load('/otherPage.html .content');

就是这样。