有很多关于Django和AJAX使用的帖子和页面,我在过去一天左右阅读了数百个,寻找这个问题的答案.快速概述:
示例中的5月显示了这样的硬编码URL:
$.post("/projects/create/", {"name" : name}, function(data) {...
Run Code Online (Sandbox Code Playgroud)
或者一些使用URL模板标签,但没有参数:
$.post("{% url create_project %}", {"name" : name}, function(data) {...
Run Code Online (Sandbox Code Playgroud)
但是,我想在URL中包含一个Django样式的参数.这是我的网址定义:
url(r'ajax/entity_name/(?P<pk>\w+)/$',EntityAjaxView.as_view(),name='entity_name'),
Run Code Online (Sandbox Code Playgroud)
是的,我正在使用基于类的视图,它基于DetailView.默认情况下,此视图会在URL中提供pk值,而在我将使用的普通模板中:
{% url entity_name id_number %}
Run Code Online (Sandbox Code Playgroud)
提供链接.在我的代码中,我想获取输入框中为pk值输入的值.这是我的JavaScript代码片段(不起作用):
var id_number = $('#id_endowmententity_set-' + rownum + '-id_number').val()
$.ajax({
type: "GET",
url: '{% url entity_name id_number %}',
Run Code Online (Sandbox Code Playgroud)
所以,我的问题是,我可以使用带有输入框值的URL模板标记吗?
(我知道我可以使用POST而不是GET并在POST数据中传递id_number,但这对于DetailView来说效果不佳.)
在此先感谢您的帮助.
mik*_*725 13
Django是一个服务器端应用程序.Javascript是客户端的.Django模板在服务器上呈现,因此{% url entity_name id_number %}在服务器端进行评估,然后将其值返回给客户端.正因为如此,你不可能将Django模板与javascript结合起来.但是,您可以采取一些措施来解决问题.
由于您正在进行ajax调用,并且ajax调用依赖于某些用户输入,因此客户端向服务器发送任何类型的用户输入的最佳途径是使用查询字符串(?URL中的后续内容)或发送一个POST数据.因此,最简单的方法是更改您的网址,不要将其包含pk在网址中,而是将视图作为网络的一部分GET或POST数据.
url(r'ajax/entity_name/$', EntityAjaxView.as_view(), name='entity_name'),
Run Code Online (Sandbox Code Playgroud)
和视图(抱歉,我不熟悉基于类的视图):
def entity_name(request):
pk = request.GET.get('pk')
...
Run Code Online (Sandbox Code Playgroud)
在我看来,这是最优雅的解决方案.但是,如果您绝对需要在客户端构建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,
...
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13044 次 |
| 最近记录: |