我有一个简单的 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 代码按照要求(我很欣赏它有点迂回,但我的 friend 写了它,我不想在一切正常工作之前修剪它):
<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>
我错误地将其称为某种模板。这是一个简单的 HTML 文件,可在 <project root>/templates/gogetgas/toosoon.html
中找到。 .
回答
为了进一步澄清 Daniel Roseman 下面的答案,我必须使用 jQuery 做一些事情来加载响应。我很困惑并认为 Django render
会以某种方式加载页面,而不需要 jQuery。我创建了一个变量来发布 ajax 请求,然后在 .done
上发布。回调我清空主体并用数据填充它:
var xhr = $.post("/", {selected:selected});
xhr.done(function(data){
console.log('done');
$('body').empty().html(data);
});
最佳答案
您的 jQuery 脚本中没有任何可以显示 POST 结果的代码。 AJAX 查询将异步获取数据,但您实际上需要对浏览器返回的任何内容执行某些操作。
关于python - render() 不渲染模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22253844/