Django Javascript中的DRY URL

noi*_*oio 50 javascript django ajax google-app-engine dry

我在Appengine上使用Django.我reverse()到处都在使用django 功能,尽可能保持干燥.

但是,我在将这个应用到我的客户端javascript时遇到了麻烦.有一个JS类根据传入的ID加载一些数据.有没有一种标准的方法来对这些数据应该来自的URL进行硬编码?

var rq = new Request.HTML({
    'update':this.element,
}).get('/template/'+template_id+'/preview'); //The part that bothers me.
Run Code Online (Sandbox Code Playgroud)

Ana*_* Rr 33

还有另一种方法,它不需要暴露整个url结构或用于解析每个url的ajax请求.虽然它不是很漂亮,但它简单地击败了其他人:

var url = '{% url blog_view_post 999 %}'.replace (999, post_id);
Run Code Online (Sandbox Code Playgroud)

(blog_view_post网址999当然不能包含幻数.)

  • 我一直这样做,觉得有点脏,但是在这里看到它让我觉得好一点. (8认同)

kdo*_*pen 10

刚刚解决这个问题,我提出了一个稍微不同的解决方案.

在我的例子中,我想要一个外部JS脚本在按钮点击时调用AJAX调用(在进行一些其他处理之后).

在HTML中,我使用了HTML-5自定义属性

<button ... id="test-button" data-ajax-target="{% url 'named-url' %}">
Run Code Online (Sandbox Code Playgroud)

然后,在javascript中,简单地做了

$.post($("#test-button").attr("data-ajax-target"), ... );
Run Code Online (Sandbox Code Playgroud)

这意味着Django的模板系统reverse()为我完成了所有逻辑.


noi*_*oio 8

最合理的解决方案似乎是在JavaScript文件中传递一个URL列表,并在客户端上提供相当于reverse()的JavaScript.唯一的反对意见可能是暴露了整个URL结构.

这是一个这样的功能(来自这个问题).