You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Django模板中使用AJAX时遭遇Could not parse the remainder错误求助

Django AJAX商品筛选模板渲染错误排查与解决

相关代码

视图函数

def filter_data(request):
    categories = request.GET.getlist('category[]')
    brands = request.GET.getlist('brand[]')

    allProducts = Product.objects.all().order_by('-id').distinct()
    if len(categories) > 0:
        allProducts = allProducts.filter(Categories__id__in=categories).distinct()

    if len(brands) > 0:
        allProducts = allProducts.filter(Brand__id__in=brands).distinct()


    t = render_to_string('ajax/shop.html', {'product': allProducts})

    return JsonResponse({'data': t})

HTML中的AJAX脚本

{% block script%}

<script>
    $(document).ready(function(){
        $(".filter-checkbox").on('click', function(){
            var filter_object={};
            $(".filter-checkbox").each(function(index,ele){
                var filter_value=$(this).val();
                var filter_key=$(this).data('filter');
                console.log(filter_key,filter_value);
                filter_object[filter_key]=Array.from(document.querySelectorAll('input[data-filter='+filter_key+']:checked')).map(function(el){
                     return el.value;
                });
            });
            $.ajax({
                url:'{% url filter-data %}',
                data:filter_object,
                dataType:'json',            
                success:function(res){              
                    $("#filteredProducts").html(res.data);              
                }
            });
        });
    });
</script>
{% endblock %}

URL配置

path('shop/filter-data',filter_data,name='filter-data'),

错误情况

运行时先触发模板渲染错误:Could not parse the remainder: '-data' from 'filter-data',错误定位在脚本的url:'{% url filter-data %}'行。将其修改为url:'{% url 'filter-data' %}'后,仍出现模板语法错误(提示URL名称未注册或命名空间问题)。

解决方案

1. 修正URL标签的引号与命名空间

  • 若URL未设置命名空间,确保{% url %}标签内的名称用引号包裹,且与外层引号区分开(避免解析冲突):
    url:"{% url 'filter-data' %}"
    
  • 若URL配置在带命名空间的应用下(比如主urls.py中用include('app.urls', namespace='shop')),需加上命名空间前缀:
    url:"{% url 'shop:filter-data' %}"
    

2. 验证URL名称与视图导入

  • 检查URL配置中的name='filter-data'拼写完全匹配模板中引用的名称,无大小写或字符错误。
  • 确认URL所在文件已正确导入filter_data视图:
    from .views import filter_data
    

3. 清除模板缓存

Django可能缓存旧模板内容,执行以下命令清除缓存后重启开发服务器:

python manage.py clearcache

4. 修复AJAX与视图的参数匹配

当前AJAX构造的参数键为category/brand,但视图中获取的是category[]/brand[],需二选一调整:

  • 方案一:修改视图获取逻辑为request.GET.getlist('category')和request.GET.getlist('brand')
  • 方案二:修改AJAX的参数键名:
    filter_object[filter_key + '[]'] = Array.from(document.querySelectorAll('input[data-filter='+filter_key+']:checked')).map(function(el){
         return el.value;
    });
    

内容的提问来源于stack exchange,提问作者user21944756

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 17:35:01