【问题标题】:Django: User Javascript object as context variableDjango:用户 Javascript 对象作为上下文变量
【发布时间】:2012-11-29 19:36:38
【问题描述】:

我一直有这个问题。但我无法弄清楚如何做到这一点。有没有办法,我们可以使用带有模板语言的 javascript 对象。例如,我有在选择小部件上呈现的类别查询集。

Category: <select name="category" id="id_category">
{% for category in categories %}
<option value="{{category.id}}">{{category.name}}</option>
{% endfor %}
</select>

现在,对于选定的类别,我异步调用服务器以返回相关的产品类型。

$('#id_category').change(function(){
    getProductTypes($(this).val());

});

在 ajax 函数中,我无法在 url 模板标签中使用 category_id js 对象。因此,我必须对目标 url 进行硬编码。任何人都可以建议一种方法来处理这个问题。谢谢

function getProductTypes(category_id){
         //Would like to do this
           var url = {% url lookup_product_types category_id %}
         //But end up doing this
           var url = '/'+category_id+'/product_types/find/'
              $.ajax({
                url:url,
                data:{category:category_id},
                dataType:'json',
                success: function(data, status, xhr){
                    html = '<select>';
                    $.each(data, function(index, value){
                        html += '<option value='+this.pk+'>'+this.fields.name+'</option>';
                    });
                    html += '</select>';
                    $('#productType').html(html);
                }  
              });

【问题讨论】:

    标签: django django-templates django-views django-urls


    【解决方案1】:

    在选项标签上使用data attribute 怎么样?

    您可以将模板更新为 -

    {% for category in categories %}
        <option data-url="{% url lookup_product_types category.id %}" value="{{category.id}}">{{category.name}}</option>
    {% endfor %}
    

    然后沿线改变ajax -

    $('#id_category').change(function(){
        var url = $(this).find('option:selected').attr('data-url');
        getProductTypes($(this).val(), url);
    });
    
    function getProductTypes(category_id, url){
        $.ajax({
            url: url,
            data:{ category:category_id},
            // ..
    

    【讨论】:

    • 这似乎是一个很好的方法。谢谢,我会继续这样做。
    • 没问题 - 我最近才发现 data-attribute - 我觉得我一直在寻找它!
    • 呵呵...我们通常会忽略显而易见的事情。再次感谢。
    猜你喜欢
    • 2013-07-26
    • 1970-01-01
    • 2012-12-02
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    相关资源
    最近更新 更多