2013-11-25 69 views
0

我有以下success function ajax调用,它为图像创建HTML并将其附加到div用Django模板标签内部的JavaScript变量代替

success:function(response) 
    { 
     var new_comment = $('<div class="row" style="background-color:white;margin:5px;">{% thumbnail '+response.author_image+' "35x35" crop="center" as im %}<img src = "{{im.url}}" width="{{im.width}}" height="{{im.height}}" >{% endthumbnail %}') 

     $(".comments").append(new_comment); 

    }, 

我使用sorl-thumbnail应用程序来显示模板中的图像。这是通过{% thumbnail url ...%}标签完成的,该标签需要图像的url。

此URL存储在response.author_image和Im试图在模板标记内替换此值。

response.author_image通过

{% thumbnail '+reponse.author_image'+ ... %} 

保持此值'/media/Images/Profile_2_(PSF)_5.png'

这样做是替代变量名称,而不是它的值:

[Errno 2] No such file or directory: u'/home/hammad/virt_env/virt1/gccFishing/gccFishing/media/+response.author_image+' 

我怎么能代替的response.author_image值内thumbnail template tag

TIA

回答

0

从你的问题,很明显,你不明白的服务器端模板语言和客户端Javascript,这是一个非常基本的东西不明白之间的差别。

模板标签在服务器端进行评估,所有Javascript将会看到的是这些标签的呈现响应。这意味着没有办法将JS函数的结果插入标签本身。

但是,既然您使用的是Ajax调用,为什么不从该响应返回div的完整HTML(包括呈现的模板标记)呢?也就是说,使用模板片段并将其渲染为Ajax视图的响应。

0

还有就是你似乎缺少Django的模板代码JavaScript之间的和在浏览器中一个重要的区别:

Django模板是建立在服务器端,而JavaScript是在客户端执行。

这意味着模板代码之前 JavaScript是始终执行(因为它是由服务器执行,之前的页面发送到客户端)。因此,使用JavaScript处理Django模板代码是绝对不可能的。

一种选择是使用sorl-thumbnailget_thumbnail方法来获得服务器端的正确缩略图的URL,然后在你的Ajax响应返回,而不是author_image它。