【问题标题】:Post form data then render new template发布表单数据然后渲染新模板
【发布时间】:2017-06-19 14:12:03
【问题描述】:

所以我的 HTML 中有一个如下所示的表单:

<form id="passer" method="POST" action="{% url 'Sizer:printView' %}">
    {% csrf_token %}
    <input type="hidden" id="vals">
    <input type="submit" value="Print all selected items" id="printBut">
</form>

使用此表单我希望实现的是,当单击提交按钮时,我的 jQuery 将计算一个值并将其放入表单中的 vals 字段中,然后我希望它发布到 printView 视图(以获取计算的数据到视图中),然后在数据发布后渲染一个新模板并传入由 jQuery 计算的数据。

我的 printView(发布数据的地方)如下所示:

def printView(request):
    to_print = str(request.POST.get('vals'))
    template = "Sizer/printview.html"
    context = {'to_print':to_print}
    return redirect('requested_print_data', to_print)

我的 requested_print_data 视图(我想在其中呈现我的新模板)如下所示:

def requested_print_data(request):
    all_data['to_print'] =       #Dont know how to get my variable 

    template = "Sizer/printdata.html"
    context = {'all_data':all_data}
    return render(request, template, context)

所以目前发生的情况是,当表单提交时,值被计算并存储到表单中,URL 将从它发布的地方获得额外的部分(www.example.com/printables ---On提交---> www.example.com/printables/printview/) 但模板将保持不变。

我已经坚持了一两天了,所以任何帮助都将不胜感激!

编辑:根据要求使用 jQuery:

$('#passer').submit(function(){
    console.log("Inside click");
    var selected = [];
    var $vals = "";
    $('.datatable').find('input[type="checkbox"]:checked').each(function(){
            selected.push($(this).attr('value'));
    });
    $.each(selected, function(index, val){
        $vals+= val + ',';
    });
    console.log($vals)

    $("#vals").val($vals)

【问题讨论】:

  • 你应该阅读整页docs.djangoproject.com/en/1.10/topics/forms。此外,如果您想在另一个视图中获取发布的数据,您将需要一个模型或将其存储在会话中并在下一个视图中检索它。
  • @cdvv7788 谢谢,我现在就通读一遍。它不必转到另一个视图,我的目标是将 jQuery 计算的数据放入另一个模板中,这样我就可以用它渲染一些数据。有人告诉我,没有模型和会话是可能的(这是我想避免的)

标签: html django forms post


【解决方案1】:

您可以在 printView 本身中呈现输出。无需编写另一个视图。将您的 printView 更改为

def printView(request):
    to_print = str(request.POST.get('vals'))
    template = "Sizer/printdata.html"
    context = {'all_data':to_print}
    return render(request, template, context)

【讨论】:

  • 感谢您的回答,但这并不能解决我的问题。我仍在更改 URL(更改为正确的 URL),但它加载了相同的模板并忽略了视图中声明的模板。
  • @J.Scull 你能粘贴你使用的 jquery 代码吗,为什么因为如果数据正确发布到新视图并且我已经更改了模板,如果@987654322 它应该正确呈现新数据@ 和 Sizer/printview.html 是不同的。
  • 将 jQuery 添加到问题中
  • printView 视图的用途是什么?我可以看到该视图没有执行任何新功能,它只是将发布的数据返回到新的请求打印数据。
  • 一位用户告诉我将它提交到一个视图,然后重定向到另一个视图并从那里渲染模板。我不同意,但我遵循了。只要满足我将jQuery中计算的数据放入printdata.html模板的要求,我不介意刮掉其他功能!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-03
  • 1970-01-01
  • 2017-11-30
  • 2018-10-08
相关资源
最近更新 更多