未找到任何参数的“my_views_name”反向。 django - jquery,连接服务器端和客户端 js

Posted

技术标签:

【中文标题】未找到任何参数的“my_views_name”反向。 django - jquery,连接服务器端和客户端 js【英文标题】:Reverse for 'my_views_name' with no arguments not found. django - jquery , connect server side with client side js 【发布时间】:2021-10-14 00:34:09 【问题描述】:

我想制作一个按钮来更新网址。我使用 jquery-ajax 从数据库调用数据

这是我的观点.py

def list_maingroup(request):
    lists = MainGroup.objects.all().order_by('-pk')
    data = []
    for i in lists:
        item = 
           'id':i.id,
           'admin':i.admin.username,
           'main_type':i.main_type,
           'date':i.date
        
        data.append(item)
    return JsonResponse('data':data)

def update_maingroup(request,id):
    obj = get_object_or_404(MainGroup,id=id)
    form = MainGroupForm(instance=obj)
    if request.is_ajax() and request.method == 'POST' and request.user.is_superuser:
        if form.is_valid():
            form = MainGroupForm(request.POST,instance=object)
            form.save()
            return JsonResponse('success':'success')
        else:
            return JsonResponse('success':False,'error_msg':form.errors,'error_code':'invalid')

    context = 'form':form,'obj':obj
    return render(request,'update_maingroup.html',context)

我的 urls.py

path('maingroup/update/<int:id>',update_maingroup,name='update_maingroup'), 
path('list-main-group',list_maingroup,name='list-maingroup'),

我的表格+我的模型

class MainGroup(models.Model):
    admin = models.ForeignKey(User,on_delete=models.CASCADE)
    main_type = models.CharField(max_length=40,unique=True)
    date = models.DateTimeField(auto_now_add=True)

class MainGroupForm(forms.ModelForm):
    class Meta:
        model = MainGroup
        fields = ['main_type']

但它会引发此错误:

没有找到没有参数的“update_maingroup”反向。尝试了 1 种模式:['maingroup/update/(?P[0-9]+)$']

我的模板

$.ajax(
    type:'GET',
    url:'/list-main-group',

    success:function(data)

      data = data.data
      spinnerBox.classList.add('non-visible')
      var k = '<tbody>'
      for(i = 0;i < data.length; i++)
        const date = new Date(data[i]["date"]).toLocaleString();
        const id = parseInt(data[i]['id'])
        // const url = '% url "products:update_maingroup" %'
        // const my_url = url + "/"+id
        
          k+= '<tr>';
          k+= '<td>' + data[i]['id'] + '</td>';
          k+= '<td>' + data[i]["admin"] + '</td>';
          k+= '<td>' + data[i]["main_type"] + '</td>';
          k+= '<td>' + date + '</td>';
          k+= '<td align="center">'+
            
            '<button class="btn btn-info bg-info"  id="update" data-url='+% url "products:update_maingroup" id %+ '><i class="far fa-edit"></i></button>'+
            ' <button class="btn btn-danger btn-del bg-danger" data-did='+parseInt(data[i]["id"])+"><i class='far fa-trash'></i></button>"+

              '</td>';               
          k+= '</tr>'
      
      k+='</tbody>'
        
      tableBody.innerHTML = k   
          
      $('#maingroupid').dataTable(     
        "order": [[ 0, "desc" ]]
      );
    ,
    // error:function(error)
    //   console.log(error)
    // 
   
  );

      <div class="card-body table-responsive" >
        <div id="spinner-box" class="spinner-border text-primary text-center" role="status">
        </div>
        <table id="maingroupid" class="table table-bordered table-striped text-center">
        <thead>              
          <tr>
            <th>#</th>
            <th>% trans "admin" %</th>
            <th>% trans "name" %</th>
            <th>% trans "date" %</th>
            <th>% trans "options" %</th>

          </tr>
          </thead>
          <tbody id="tableData">

          </tbody>
          </tfoot>
        </table>

      </div>

我知道,我必须从服务器获取 id,但我不知道从哪里获取它

【问题讨论】:

您的 urls.py 看起来如何?会不会是您忘记声明它要查找的 URL? @AnnaM 添加了网址 感谢您添加网址。看来您当前的 django 实例只知道一种模式(尝试了 1 种模式:)您可以尝试重新启动并查看它是否正在寻找两种模式吗? 显示同样的错误 【参考方案1】:

您的代码中的错误非常微妙,我认为 Django 文档没有真正指向这一点。 注释掉 django 模板代码时,绝对需要使用 Django 格式。如果您使用常规格式(例如 javascript 中的 // 或 HTML 中的 &lt;!-- --&gt;),Django 语法仍将被执行。

在您的代码中,您有以下行:

        // const url = '% url "products:update_maingroup" %'

此网址不存在,因为您的 update_maingroup 网址被定义为始终与附加参数 id 一起使用。

我建议在评论时删除这一行或使用 django 格式:

# const url = '% url "products:update_maingroup" %' #

编辑:有关如何从 javaScript 变量中使用正确 url 的附加信息: 请看一下这个问题+答案。 长话短说:没有真正的方法可以做到这一点,但人们已经找到了解决方法:Get javaScript variable into url tag.

【讨论】:

那么在哪里将更新 url 放入我的 js 代码中?以及如何为 url 提供 id ? 我已经扩展了我的答案。简短的回答是没有真正的方法可以做到这一点,只有绕过它的方法。通常,您需要创建一个不需要参数的 url,并将其用作虚拟对象,然后更新 url。但是您可以在链接的答案中阅读更多相关信息。

以上是关于未找到任何参数的“my_views_name”反向。 django - jquery,连接服务器端和客户端 js的主要内容,如果未能解决你的问题,请参考以下文章

“未找到带有参数 '()' 和关键字参数 '' 的 '' 的反向操作。”

未找到带有参数“(”,)”和关键字参数“”的“比率”的反向

未找到带有参数“()”和关键字参数“”的“登录”的反向操作

我得到一个'views.mainPage'的反向参数'()'和关键字参数''未找到。

使用参数 '()' 和未找到关键字参数的 ' 反向。尝试了 1 种模式:

接收错误:使用参数“()”和未找到关键字参数反向