【问题标题】:Django: How to assign a template variable to a views variable?Django:如何将模板变量分配给视图变量?
【发布时间】:2017-05-15 19:35:52
【问题描述】:

我在 Javascript 中有以下代码,它从下拉列表中获取用户名并将他/她的“is_active”属性更改为 true:

function acceptFunction(){
    var select = document.getElementById("dropdown");
    var elementText= select.options[select.selectedIndex].text;
    var lbl = document.getElementById("lbl");

    {% for user in list %}
        {%  ifequal user.username strUser %}
            {{ user.is_active }}=true;
        {% endifequal %}
    {% endfor %}

    var i;
    for (i=0;i<select.length;  i++) {
        if (select.options[i].text==elementText) {
            lbl.textContent=select.options[0].text;
            select.remove(i);
        }
    }
}

“select”变量是一个下拉列表,“elementText”是网站用户当前时间选择的列表元素,“lbl”变量是用于打印所选元素的标签。

在views.py中我有以下内容:

def acceptUserRequest(request):
    list = User.objects.all()
    strUser=''
    return render(request, 'acceptUserRequest.html', {'list': list, 'strUser':strUser})

我很难在 strUser 中分配 elementText 的值。 Django 中有没有办法做到这一点?

谢谢。

【问题讨论】:

  • 有但不是 Django 特有的,它是一个通用的 Web 应用程序工作流。您必须创建另一个视图,比如说update_user,并在您的 HTML 上使用 AJAX 来发布数据,视图将读取它并负责在数据库中持久化更改。或者,您可以使用常规 Web 表单并将其发布到该视图。
  • @PauloScardine 非常感谢您的建议。不幸的是,我对 AJAX 了解不多,而且我很难以这种方式实现它。

标签: javascript django


【解决方案1】:

请记住,当用户向您的应用发出请求时,会处理视图,然后使用 JS 代码生成模板。因此,如果您的 javascript 代码中有数据要在视图中使用,则需要根据情况发出请求 GET 或 POST,以便视图可以获取此值。

例如,您可以使用以下 GET 请求 http://yourURL/acceptUserRequest/&elementText=True

那么在你看来:

    elementText = request.GET.get('elementText', '')

如果您想保持在同一页面上并使用我们在 cmets 中讨论的 ajax,请执行以下操作。这是一个非常简单的例子。您在 Django 中创建一个将接收请求的视图。

    def accept_notification(request):
        parameter = request.GET.get('parameter', '')
        ... Do somehting with the data...

您可以根据需要发送多个参数。 您需要此视图的 url,并且应该将侦听器附加到 HTML 中的元素。像这样。

    $("radiobutton").click(function(){
        $.get("http://www.your-url/accept_notification/&parameter=HELLO", function(data, status){
            alert("Data: " + data + "\nStatus: " + status);
        });
    });

警报实际上是回调函数。在您的情况下,您可以将其留空或添加一段代码以在服务器响应后执行。

【讨论】:

  • 这是一个很好的方法,但我的目标不是将用户重定向到同一个网页,而是让他/她在他/她出现在网页上时能够完成此任务(改变用户的属性)不止一次。
  • 好的,在这种情况下你可能想用 AJAX 来做。如果用户选择一个选项,您将触发一个带有 AJAX 的请求,该请求将由您创建的新视图接收。此视图将更新数据库中的值,但页面不会刷新。如果我正确理解了您的问题,我认为这将对您有所帮助。如果不是,请纠正我。
  • 这正是我正在寻找的,但不幸的是我对 AJAX 了解不多。方便给我看一个例子,说明如何使用 AJAX 让模板与视图进行通信吗?
  • 我已经用一个基本的 AJAX 示例更新了我的答案。希望能帮助到你。否则请告诉我。
  • 非常有帮助。非常感谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-09
  • 2013-01-01
  • 2012-01-21
  • 2012-07-23
  • 2019-04-03
相关资源
最近更新 更多