【问题标题】:Django - Is it possible to transfer template tags to client asynchronously?Django - 是否可以将模板标签异步传输到客户端?
【发布时间】:2019-10-02 11:55:31
【问题描述】:

我正在寻找一种接收模板标签的方法, 特别是在视图中生成的贝宝表单。 我一直在尝试使用 jquery $.post 和 $.get 无济于事。 也被认为是ajax,但它似乎只接收json 我的模板标签之一是表单,它不能转换为 json: TypeError: PayPalPaymentsForm 类型的对象不是 JSON 可序列化的

对于在贝宝中单击浏览器返回按钮的用户,我需要这个, 如果发生这种情况,我需要将价格发送到视图 并生成表格, 如果我不发送商品和折扣,我将获得 multivaluedictkey

views.py

return render(request, 'pagamentos/payment.html', { 'morada':morada, 'telemovel':telemovel,'codigo_postal':codigo_postal, 'cidade':cidade, 'form': form })

payment.html

$.post( "/token/", {
    items: x.toString(),
    desconto: y.toString() ,
    'csrfmiddlewaretoken': '{{ csrf_token }}' },
    function( data ) {
      console.log(data.morada)
      console.log(data.telemovel)
      console.log(data.cidade)
      console.log(data.codigo_postal)
      console.log(data.form)
});

这样不行。

正在寻找一种在 javascript 就绪函数中加载模板标签的解决方案,无需额外的按钮。

【问题讨论】:

  • data 将作为 HTML 到达。您将无法访问 data.morada 等。如果这是您想要的,请考虑将此数据作为 JSON 从您的视图发送,而不是呈现到模板。
  • 我明白了。是否可以在服务器中将表单转换为 json?并在客户端 html?
  • 是您在payment.html 模板中的问题中发布的JS 代码吗?
  • 是的,这是在 payment.html 中
  • 对于在贝宝中单击浏览器返回按钮的用户,我需要这个,以防发生这种情况,如果我不发送,我需要将项目和折扣发送到视图并生成表单价格我会得到 multivaluedictkey

标签: ajax django post get


【解决方案1】:

我认为您想要的是在渲染期间将 django 变量保留在 JS 变量中。

这样的事情应该可以工作:

payment.html

var data = {
    morada: '{{ morada }}',
    telemovel: '{{ telemovel }}',
    cidade: '{{ cidade }}',
    // ... other variables
};


$.post(...);

【讨论】:

  • 我正在这样做。它工作正常。但是,我要解决的是从贝宝返回到 payment.html。当我转到 payment.html( items 和 desconto ) 时,我需要发布两个值,否则我会得到 multivaluedictkey。所以我在尝试 $.post(),但是我看不到如何接收变量(morada、telemovel、form...)
  • @Jaime38130 问题是模板在到达客户端之前在服务器上呈现。接收这样的原始数据的唯一方法是通过 JSON。您可以使用 request.is_ajax() 在您的 ajax 请求中返回 JSON 数据并呈现 HTML 模板。
  • 我明白了。我打印了 type(form) 并得到了这个:,所以这就是我现在在模板标签中发送的内容。我想知道通过 json 将表单发送到 payment.html 是否可行,你怎么看?
  • TypeError: PayPalPaymentsForm 类型的对象不是 JSON 可序列化的
  • @Jaime38130 Python 类不是 JSON 可序列化的。即使他们是,浏览器也不理解 Python,所以无论如何这都行不通。您有两种选择:(1) 将表单特定数据作为 JSON 发送,并使用 javascript 在浏览器上动态生成表单。 (2) 或者在服务器上渲染表单并使用javascript更新模板。这更容易,但您将无法访问单个变量,因为所有内容都将以预呈现的 HTML 形式出现。
猜你喜欢
  • 1970-01-01
  • 2011-06-03
  • 1970-01-01
  • 2014-12-30
  • 2018-07-25
  • 2018-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多