【发布时间】: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<query>\w+)/details', views.view, name='view'),和 它运作良好。如果是这样,也许我可以重新命名如何 将参数添加到 Django URL 正在查找的 url 论据。
【问题讨论】:
-
我们可以看看
views.view的代码吗? -
@pocketkings 哦,是的,我编辑了。我还发现错误发生在
render()我要重新做这个问题,因为我遇到了如何在模板加载时添加参数的问题
标签: javascript ajax django