首页 > 解决方案 > 如何将参数从一个模板发送到 django 中的另一个模板/视图?

问题描述

好的,所以我在views.py中有这些功能

def main(request):
    if request.method == 'POST':
        return newFunction(request)
    return render(request,'user/main.html')

def newFunction(request):
    num = request.POST["number"]
    let = request.POST["letter"]
    context = {'num':num,'let':let}
    return render(request,'user/test.html',{'c':context})

那 main.html 看起来像这样

{%extends 'base/base.html'%}

{%block title%}Main{%endblock%}

{%block content%}


<form method="post">
    {%csrf_token%}
    <input type="text" name="number">
    <input type="text" name="letter">
    <button type="submit">Save</button>
</form>


{%endblock%}   

urls.py

path('index/',main,name='main'),
path('test/',newFunction,name='test'),

如您所见,我进入 main.html 页面并出现一个表单,要求我输入一个数字和一个字母。我输入这两个输入,当点击提交时,它会将我重定向到另一个 html 并向我显示字母和数字。问题是 url 仍然显示 user/index.html,而不是 user/test.html

我怎样才能做到这一点?我想基本上单击提交并将所有值发送到另一个模板,但在此过程中更改 url。

标签: djangodjango-templatesdjango-views

解决方案


你可以使用 ajax 来做到这一点。您也可以使用表单,但 ajax 更适合仅将数据传递给查看。

只需发送带有一些数据的 ajax 请求,并将其发送到您的目标视图。

$.ajax({
    type: 'POST',
    url: "{% url 'test' %}",
    data: {
        "csrfmiddlewaretoken": "{{ csrf_token }}",
        "num": 'number',
        "let": 'letter'
    },
    dataType: 'json',
    success: function(e) {
        // success after receive response
    }
});

当然你可以用form. 只需将您的目标网址添加到action.

<!-- add your target url in action -->
<form method="post" action="{% url 'test' %}">
    {%csrf_token%}
    <input type="text" name="number">
    <input type="text" name="letter">
    <button type="submit">Save</button>
</form>

推荐阅读