【问题标题】:Rendering templates using Jinja2 and Webapp2使用 Jinja2 和 Webapp2 渲染模板
【发布时间】:2014-12-23 02:56:31
【问题描述】:

我对编程很陌生,如果我在解释自己方面做得不好,请提前道歉。

我正在使用 Python、Webapp2、Jinja2 和 jquery 创建一个 GAE 应用程序。我可以通过 HTML 表单传递字符串查询来更新 HTML 页面,将查询添加到 Python 字典,并使用 Jinja2 和 Webapp2 来呈现和写出它们。

但是,当我尝试使用 jquery Ajax post 方法而不是使用 HTML 表单发出 POST 请求时,我的 HTML 页面没有更新。我肯定是从我的 Python 程序中调用渲染函数,但它什么也没做。

任何人都可以提供给我的任何帮助或建议将不胜感激。提前致谢。

这是我的 python 代码,它继承了一个处理所有 Webapp2 请求的基类。这通常效果很好。

class EditJobPage(AppHandler):
global objectDict
objectDict ={}

def get(self):
    jobs = Job.querynewjobs()
    TemplateDict = {}
    TemplateDict = {
        'jobs': jobs,
    }
    self.render('editjob.html', **TemplateDict)

def post(self):
    MyKey = self.request.get('job_key')
    TemplateDict = {}
    try:
        job = GetFromSafeKey(MyKey)
        objectDict['job'] = job
        TemplateDict = {
            'job': job,
        }
        if self.request.get('what') == 'rename':
            TemplateDict['jobdescription'] = self.request.get('rename_description')
            self.rename(**TemplateDict)
        elif self.request.get('what') == 'delete':
            self.delete(**TemplateDict)
        elif self.request.get('what') == 'renumber':
            TemplateDict['jobnumber'] = int(self.request.get('renumber_description'))
            self.renumber(**TemplateDict)
    except:
        TemplateDict['error'] = 'No job selected'
    self.render('editjob.html', **TemplateDict)
    logging.info('here')

这里是基类。同样,当我使用 HTML 表单按钮调用时,这一切都很好。

$("#deletejobbutton").click(function(event) {
var JobKey = $('#mykey').val();
var querystring = 'what=delete'
$.ajax({
url: '/templates/editjob',
data: { 
    "what": 'delete',
    "job_key": JobKey,
},
dataType: 'json',
type: "POST",
success: function(response) {
},
error: function(xhr) {
}
});
}); 

当我运行它时,HTML 页面没有任何反应。然而,GAE 日志显示“这里”,所以我知道它是 Python 代码。但是,如果我使用带有字符串查询的 HTML 表单尝试相同的操作,页面就会更新。这是 GAE 日志:

INFO     2014-10-27 11:39:53,404 module.py:659] default: "POST /templates/editjob HTTP/1.1" 200 2228
INFO     2014-10-27 19:40:03,249 MyClasses.py:120] here

INFO     2014-10-27 11:40:03,250 module.py:659] default: "POST /templates/editjob HTTP/1.1" 200 2228

再次感谢您的帮助。我希望这不会太混乱。几周前我从头开始,所以我仍在努力解决所有这些问题。

【问题讨论】:

  • 我建议您下载 Fiddler 并准确查看正在生成的请求和响应。它将为您省去很多调试麻烦! :-) 另外,使用浏览器的开发工具控制台查找任何错误(例如,Chrome 中的 ctrl+shift+j)。
  • 感谢您的建议,卡梅伦。我马上试试。

标签: jquery jinja2 webapp2


【解决方案1】:

如何,我不确定。然而,它现在工作正常。我认为 jquery 代码实际上并没有真正归结为 $.ajax 函数,尽管我不确定它是如何进入我的 Python 脚本的。我想这就是让我失望的原因。直到今天我才使用过 jquery,所以我想我只是想比我能做到的更快地学习这些东西。

【讨论】:

    猜你喜欢
    • 2012-03-18
    • 2017-03-01
    • 2013-10-24
    • 1970-01-01
    • 2018-07-29
    • 2016-08-23
    • 2017-10-04
    • 1970-01-01
    • 2013-10-30
    相关资源
    最近更新 更多