【问题标题】:Accessing a widgets value in django template访问 django 模板中的小部件值
【发布时间】:2017-05-28 10:18:18
【问题描述】:

我需要在 django 中进行 ajax 调用,具体取决于在两个日期字段上设置的值和一个选择下拉菜单。为此,我必须将这些值传递给 javascript 函数,该函数将在单击按钮时调用。我已将表单日期字段设置为日期类型并选择为选项字段。如何将这些的当前值传递给 javascript 函数?

form.html(模板):

<div class="form-group">
    <label class="control-label">* Start Date:</label><br>
    {{ form.date1 }}
</div>
<div class="form-group">
    <label class="control-label">* End Date:</label><br>
    {{ form.date2 }}
</div><br><br>
<div class="form-group">
    Category: {{ form.category }}
</div>
<button type="button" class="btn btn-xs btn-warning"
onclick="javascript:check_availability({{ XXX }}, '{% url "find_available" %}');">
    Check Now
 </button>

Javascript:

function check_availability(date1, date2, category, url) {
    $.ajax({
        type: 'GET',
        url: url,
        data: {date1: date1, date2: date2, category: category},
        dataType: 'json',
        success: available_now,
        error: function() {
            alert('Unable to find available items')
        }
    });
}

fucntion available_now () {...}

在 form.py(视图)中

category = forms.ChoiceField(choices=(...))
date1 = forms.DateField(widget=forms.DateInput())
date2 = forms.DateField(widget=forms.DateInput())

对于上述函数调用,我如何传递小部件中设置的这三个值来代替 XXX?我需要专门获取下拉列表的选定值。

【问题讨论】:

    标签: django django-forms django-templates


    【解决方案1】:

    这绝不是关于 Django 的问题,而是关于 Javascript 的问题。由于您将 jQuery 用于 Ajax 函数,因此您应该使用它来获取字段的值。另请注意,您应该避免直接在 HTML 中设置 onclick 处理程序;你也应该在你的 jQuery 脚本中这样做。

    <button type="button" id='find-available' class="btn btn-xs btn-warning" data-url='{% url "find_available" %}');">
        Check Now
     </button>
    
    ...
    
    $('form').on('click', '#find-available', function() {
       $this = $(this);
       $.ajax({
            type: 'GET',
            url: $this.data('url'),
            data: $this.parent().serialize(),
            dataType: 'json',
            success: available_now,
            error: function() {
                alert('Unable to find available items')
            }
        });
    });
    

    【讨论】:

    • 我没有在这里提交完整的表单。 ajax 调用用于检查将作为列表呈现给用户的可用项目。因此,我需要使用部分填充的数据项 date1、date2 和 select 选项调用 javascript 函数。我如何引用这些值来传递函数?
    • 我没有发布任何关于表单提交的信息。此处发送的数据将包括那些字段值;如果您真的觉得有必要将其限制在这三个范围内,请使用 $('#id_date1').val() 等单独获取它们的值。但代码要多得多,我不明白它为什么重要。
    • 我可以在 form.py 中为小部件设置一个 id (#) 值。对于这种特定情况,我想避免将所有数据发送到服务器。使用你建议的方式就可以了。我想知道有没有办法直接获取模板中 {{}} 变量中的值。还是谢谢。
    • 不,当然没有办法使用 Django 模板标签获取值,因为在呈现 Django 标签时用户还没有输入值。并且无需设置显式 ID;如上所示,表单字段会自动获得一个。
    • 更改的代码现在不会调用 jquery 函数。这是代码。 &lt;button type="button" class="btn btn-xs btn-warning" id="find-available" data-url='{% url "find_available" %}'&gt; 在 jquery 中 $('form').on.('click', '#find-available', function() { alert('You clicked me')}); //sample
    猜你喜欢
    • 2018-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-12-03
    • 2023-03-21
    • 2017-11-24
    • 2012-06-07
    • 1970-01-01
    • 2014-02-08
    相关资源
    最近更新 更多