render()不渲染模板

时间:2014-03-07 15:14:05

标签: python django

我有一个简单的Web应用程序,其中包含两个按钮,每个按钮都通过jQuery发出请求。我在我的views.py中监听POST请求,并根据按下的按钮执行某些逻辑。例如:

if request.method == 'POST':
    foo = request.POST['SELECTED'] #the value of the button pressed
    if foo == 'I got gas!':
        try:
            return render(request, 'gogetgas/toosoon.html')
        except Exception as e:
            print e
...

这只是逻辑片段,但它是相关部分。当我调试它时,它会转到return render()并执行所有逻辑。但是,它不会加载我的toosoon.html模板。控制台中没有抛出任何错误,也没有打印异常。 Chrome的控制台和Django控制台分别打印出使用jQuery日志和Python打印成功的POST请求。

为什么不显示我的页面?

修改

我的jQuery代码按要求(我很欣赏它有点迂回,但我的好友写了它,我不想修剪它,直到我有一切工作):

<script type="text/javascript" src="http://code.jquery.com/jquery-1.10.0.min.js"></script>
<script type="text/javascript">
    $(document).ready(function()
    {
        //
        $('form').submit(function(e){
            return false;
        });


 $("form input[type='button']").one('click', function(e){

    var selected = $(this).val();

    console.log(selected);

    submitForm(selected);

 });


 function submitForm(sel){

     var selected =sel;
     console.log(selected);

     $.post("/", {selected: sel},function(){

     }).done(function(){
       console.log('success');
     }).fail(function(err){
       console.log(err.responseText);
     });


 }

    });
</script>

我把它称为各种模板我错了。这是<project root>/templates/gogetgas/toosoon.html中的简单HTML文件。

ANSWER

为了进一步澄清Daniel Roseman在下面的回答,我不得不用jQuery来加载响应。我感到困惑,并认为Django render会以某种方式加载页面而不需要jQuery。我创建了一个变量来发布ajax请求然后在.done回调上我清空了主体并用数据填充它:

var xhr = $.post("/", {selected:selected});

xhr.done(function(data){
    console.log('done');
    $('body').empty().html(data);
 });

1 个答案:

答案 0 :(得分:1)

您的jQuery脚本中没有任何代码可以显示POST的结果。 AJAX查询将以异步方式获取数据,但您需要实际执行浏览器返回的任何操作。