【问题标题】:Django: How to pass a javascript var to Django URL as parameter in ajax?Django:如何将 javascript var 作为 ajax 中的参数传递给 Django URL?
【发布时间】:2017-11-26 00:07:39
【问题描述】:

如何将 javascript 变量传递给 Django URL?它提出了一个,

/object/Query/details 处的类型错误

view() 得到了一个意外的关键字参数“查询”

我正在尝试在此过程之后重定向到另一个 HTML 页面:

HTML 搜索输入 > 通过输入按钮传递给 Javascript onclick > 传递给 JQuery Ajax sendQueryData> 使用 Django 重定向到另一个页面 render() ;考虑到在 AJAX 中传递参数时,我必须对传递给 URL 的参数做更多的事情。

主要问题在于这两行(我认为):

url_page = url + "{% url 'view' 'query'%}"; //supposedly how we get parameters (but query is a javascript `var`

url =url.replace('query' , query); //where I intend to correctly build the url forcing the query to take its place in the url

我只是不太确定我的 urls.py, Django url 中对 javascript 的 ajax 调用是否完全对齐。

我的 urls.py

urlpatterns = [
url(r'^$', views.index, name='homepage'),

#--- Home ---
url(r'^search/pass/$', views.pass_query, name='pass_query'),

# View Object Details
url(r'^object/(?P<query>\w+)/details', views.view(), name='view')

我的 HTML

<div id="button-group" class="button-group">
    <input type="submit" class="btn btn-primary btn-lg btn-space col-sm-3" onclick="redirect_to_url(0)" value="View Inventory"/>
    <input type="submit" class="btn btn-primary btn-lg btn-space col-sm-3" onclick="redirect_to_url(1)" value= "View Details"/>

Javascript

function redirect_to_url(to_page){
    var query = document.getElementById("search").value;
    var url = document.URL;
    url = url.slice(0, -1);

    if (to_page === 0) {
         url_page = url + "{% url 'view' 'query'%}";
         sendQueryData(url_page, query);
    }
    else if(to_page === 1) {
        url_page = url + "{% url 'another_view' 'query' %}";
        sendQueryData(url_page, query);

    }
    return false;
}

function sendQueryData(url, query){
    url =url.replace('query' , query);

    if (query === ""){
        alert("Input Required");
    }else{

        $.ajax({
          beforeSend: function(xhr, settings) {
            if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                xhr.setRequestHeader("X-CSRFToken", csrftoken);
            }
          },
          type: "POST",
          url: "/search/pass/",
          data: {
              'query' : query,
              'url' : url
          },
          success: function(result){
             alert(result);
             window.location.href = url;
          }
        });
    }

}

Views.py

def pass_query(request):
query =request.POST['query']
  print(query) 
  return HttpResponse(query)

def view(request):
  return render(request, 'plexus/view.html')

编辑:

错误发生在 AJAX Success 函数中。如果我调试正确, 我试图将window.location.href = 中的网址更改为另一个 没有参数的静态 URL,不像 url(r'^object/(?P&lt;query&gt;\w+)/details', views.view, name='view'), 和 它运作良好。如果是这样,也许我可以重新命名如何 将参数添加到 Django URL 正在查找的 url 论据。

【问题讨论】:

  • 我们可以看看views.view的代码吗?
  • @pocketkings 哦,是的,我编辑了。我还发现错误发生在render() 我要重新做这个问题,因为我遇到了如何在模板加载时添加参数的问题

标签: javascript ajax django


【解决方案1】:

您需要在views.view 定义中添加query 参数:

def view(request, query):

如果可以在不提供查询的情况下调用view,那么您可以将其定义为:

def view(request, query=None):

【讨论】:

  • 哦,我明白了。谢谢!我认为我的问题是因为我无法在 Django url 中添加一个参数,就像它在教程中显示的那样,因为它是一个 javascript 变量。节省了我很多时间!再次感谢!
猜你喜欢
  • 2011-12-19
  • 1970-01-01
  • 2021-03-30
  • 2016-04-22
  • 2018-03-21
  • 1970-01-01
  • 2019-02-10
  • 2020-01-17
  • 2020-09-06
相关资源
最近更新 更多