用Django模板标签中的javascript变量替换

时间:2013-11-25 11:07:48

标签: javascript jquery django django-templates

我有一个ajax调用的success function,它为图像创建HTML并将其附加到div

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 app在模板中显示图片。这是由需要图片网址的{% thumbnail url ...%}标记完成的。

此网址存储在response.author_image中,我试图在模板标记内替换此值。

response.author_image保留此值'/media/Images/Profile_2_(PSF)_5.png'

通过

执行此操作
{% thumbnail '+reponse.author_image'+ ... %}

替换变量名而不是其值:

[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

2 个答案:

答案 0 :(得分:0)

从您的问题中可以清楚地看出,您并不了解服务器端模板语言与客户端Javascript之间的区别,这是一个非常基本的理解。

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

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

答案 1 :(得分:0)

您似乎缺少Django模板代码和浏览器内JavaScript之间的重要区别:

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

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

一种选择是使用sorl-thumbnail的{​​{1}}方法在服务器端获取正确的缩略图网址,然后在AJAX响应中返回,而不是get_thumbnail