当前位置: 首页 > 面试题库 >

在AJAX调用中使用Django URL标记

长孙嘉容
2023-03-14
问题内容

大量的文章和页面讨论了Django和AJAX的用法,过去一天左右,我读了数百本文章,以寻找该问题的答案。快速概述:

可能的示例显示了这样的硬编码URL:

$.post("/projects/create/", {"name" : name}, function(data) {...

或某些使用URL模板标记,但没有参数的情况:

$.post("{% url create_project %}", {"name" : name}, function(data) {...

但是,我想在URL中包含Django风格的参数。这是我的网址定义:

url(r'ajax/entity_name/(?P<pk>\w+)/$',EntityAjaxView.as_view(),name='entity_name'),

是的,我使用的是基于类的视图,它基于DetailView。默认情况下,此视图查找URL中提供的pk值,在正常模板中,我将使用:

{% url entity_name id_number %}

提供链接。在我的代码中,我想获取在pk值的输入框中输入的值。这是我的JavaScript的代码段(无效):

var id_number = $('#id_endowmententity_set-' + rownum + '-id_number').val()
$.ajax({
    type: "GET",
url: '{% url entity_name id_number %}',

因此,我的问题是,我可以将URL模板标记与输入框中的值一起使用吗?

(我知道我可以使用POST而不是GET并在POST数据中传递id_number,但是在DetailView中不能很好地工作。)

在此先感谢您的帮助。


问题答案:

Django是服务器端应用程序。Javascript是客户端的。Django模板在服务器上呈现,因此{% url entity_name id_number %}在服务器端进行评估,然后将其值返回给客户端。正因为如此,您不可能将Django模板与javascript结合使用。但是,您可以做一些事情来解决您的问题。

由于您正在进行ajax调用,而ajax调用取决于某些用户输入,因此通常,客户端向Query
Server发送任何类型的用户输入到服务器的最佳途径是使用querystring(?URL中的后面)或通过发送一个POST数据。因此,最简单的方法是更改​​您的网址,而不是pk在网址中包含,而是让视图将其作为GETPOST数据的一部分来获取。

url(r'ajax/entity_name/$', EntityAjaxView.as_view(), name='entity_name'),

和视图(对不起,我不熟悉基于类的视图):

def entity_name(request):
    pk = request.GET.get('pk')
    ...

在我看来,这是最优雅的解决方案。但是,如果绝对需要在客户端上构建URL,则可以在服务器端生成模板URL,然后替换客户端上所需的任何部分以获取完整的URL。但是,这需要更多的维护,因此更容易出错。这种方法的简单js示例:

var id_number = $('#id_endowmententity_set-' + rownum + '-id_number').val(),
    url = '{% url entity_name 0 %}'.replace('0', id_number);
$.ajax({
    type: "GET",
    url: url,
    ...
});


 类似资料:
  • 问题内容: 我正在编写一个模块以在Magento中执行一个简单的Ajax调用,但是到目前为止,我还无法使它正常工作- 我觉得我在某个地方缺少重要组件。这些是我目前拥有的文件: Creare / Groupedajax / controllers / AjaxController.php: Creare / Groupedajax / etc / config.xml: 我的Ajax电话: 布局/g

  • 问题内容: 这类似于Node.js的Stream数据,但是我觉得这个问题没有得到足够的回答。 我正在尝试使用jQuery ajax调用(get,load,getJSON)在页面和node.js服务器之间传输数据。我可以从浏览器中找到该地址,然后看到“ Hello World!”,但是当我从页面尝试此操作时,它失败并显示没有任何响应。我设置了一个简单的测试页面和hello world示例进行测试:

  • 问题内容: 我想知道是否可以在ajax调用中使用诸如query_post()之类的函数? 假设我正在调用文件_inc / ajax.php 我想笨拙地使用wordpress函数,但是我不知道为什么。有人可以帮我吗? 非常感谢 :) 问题答案: WordPress提供了一个Ajax网址,您应该将其与完整的Ajax API 一起使用。 您需要创建一个jQuery函数。 例: ajaxurl var始终

  • 问题内容: 我正在尝试使用jQuery在AJAX GET中传递请求标头。在下面的块中,“数据”自动传递查询字符串中的值。有没有办法在请求标头中传递该数据? 以下内容也不起作用 问题答案: 用途: http://api.jquery.com/jQuery.ajax/ http://www.w3.org/TR/XMLHttpRequest/#the-setrequestheader- method

  • 问题内容: 我试图用will_paginategem实现Ajax调用,我发现了该指南http://ramblinglabs.com/blog/2011/11/rails-3-1-will_paginate-and-ajax,尽管它看起来很简单包含我不熟悉的coffeescript,因此,如果有人有其他解决方案,请提出建议。 我的代码如下 我的看法 我的部分(用户食谱) 更新的userrecipes

  • 问题内容: 我想在一个链中进行多个Ajax调用。但我也想在每次通话后按摩数据,然后再进行下一次通话。最后,当 所有 调用成功时,我想运行其他代码。 我正在为我的Ajax调用使用Angular $ http服务,并坚持这一点。 可能吗? 问题答案: 是的,由于AngularJS的服务是围绕PromiseAPI构建的,因此可以非常优雅地对其进行处理。基本上,对方法的调用会返回一个Promise,您可以