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

如何向Django的views.py传值?传product id取到None怎么解决

问题修复方案

现有代码返回None的核心原因是AJAX配置的url参数没有用引号包裹,Django渲染{% url 'dashboard' %}后输出的是纯字符串,没有引号会被JS识别为变量,直接触发语法错误,请求无法正常发送,后端自然获取不到参数。

修复后的代码

模板JS部分

<script>
    function change(foo) {
        $.ajax({
            url: "{% url 'dashboard' %}", // 新增引号包裹url值
            method: "GET", // 显式指定请求方法,和后端取值逻辑对齐
            data: {
                'foo': foo,
            }
        });
    }
</script>

视图部分优化(可选)

给get方法加默认值,避免后续操作None时报错:

myRequets = request.GET.get('foo', '')
更优的参数传递方案

根据使用场景可以选择以下更规范的实现方式:

  • 不需要异步请求的场景:直接将参数放到URL路径中,比GET参数更符合REST规范,也避免参数丢失问题
    1. 首先修改路由配置urls.py
    path('dashboard/<int:product_id>/', views.dashboard, name='dashboard')
    
    1. 模板中直接用a标签跳转,不需要额外JS:
    <div class="products__header--search-result">
        <ul>
            {% for product in products %}
                <li><a href="{% url 'dashboard' product.id %}">{{ product.name }}</a></li>
            {% endfor %}
        </ul>
    </div>
    
    1. 视图直接接收路径参数:
    def dashboard(request, product_id):
        # 直接使用product_id即可,不需要从GET/POST中取值
    
  • 需要异步AJAX请求的场景:用自定义data属性代替内联onclick事件,实现HTML和JS逻辑解耦,更易维护
    1. 模板结构修改:
    {% for product in products %}
        <li class="product-item" data-product-id="{{ product.id }}"><a href="#">{{ product.name }}</a></li>
    {% endfor %}
    
    1. JS绑定事件:
    $('.product-item').click(function() {
        const productId = $(this).data('product-id');
        $.ajax({
            url: "{% url 'dashboard' %}",
            method: "GET",
            data: {'foo': productId}
        })
    })
    
  • 参数为敏感信息的场景:改用POST请求传递,同时携带CSRF Token避免跨站请求伪造
    $.ajax({
        url: "{% url 'dashboard' %}",
        method: "POST",
        headers: {"X-CSRFToken": "{{ csrf_token }}"},
        data: {'foo': productId}
    })
    
    后端从request.POST中取值即可:
    myRequets = request.POST.get('foo', '')
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:45:03