4

当用户到达页面末尾时,我正在尝试动态加载新内容。我的网络应用程序使用 gae-python。我使用 ajax & jquery 来更新 html 中的查询。

HTML

{% block content %}

<div class="hero-unit special-padding">
  {% for h in hots %}
    {{ h.imageid.get().render() | safe }}

  {% endfor %}

{% include 'pager.html' %}
 </div>
{% endblock %}

jQuery & AJAX:

  $(window).scroll(function () {
     if ($(window).scrollTop() + $(window).height() > $('.hero-unit').height() - 100 && !isLoading) {$('#loadpage').click(function() {
        var page=$('#loadpage').attr('name');
        $.ajax({
            type: "POST",
            dataType:"json",
            url: '/loadpage', 
            data : {'page': page}, 
            success: updatehtml,  
        });
        return false;
        });
                    });

    function updatehtml(e){
        for (var i = 0; i < e.length; i++) {
            var html= "{{ "+e[i]['imageid']+".get().render() | safe }}";
            $('.hero-unit').append(html);
        }
    }

我序列化数据存储实体并作为 json 传递。它将更新 HTML

{{ datastoreKey.get().render()|safe }}

现在我希望 jinja2 框架.render()在 ajax 更新我的 HTML 时调用 python 函数。

我知道它可以通过用javascript编写整个HTML代码来完成,但我想知道是否有其他简单/更好的方法来做到这一点。

4

1 回答 1

1
function updatehtml(e){
        for (var i = 0; i < e.length; i++) {
            var html= "{{ "+e[i]['imageid']+".get().render() | safe }}";
            $('.hero-unit').append(html);
        }
    }

当有人请求您的 URI 时,只会呈现一次。

因此,该行将var html= "{{ "+e[i]['imageid']+".get().render() | safe }}";被渲染并包含对您的porpuse 的无效渲染。

您需要使用 html 从您的 lodapage 处理程序进行响应才能做到这一点。只需将其“移动/采用”html= "{{ "+e[i]['imageid']+".get().render() | safe }}";到您的加载页面处理程序,然后使用简单的模板文件或内联渲染它,并使其成为 html 响应。AJAX 请求将能够获取 html 格式的数据,然后您可以轻松地附加它。您必须小心 id,不要让它们依赖于 html,而是依赖于模型/id,以免重复等。

之后,您只需添加可以从e参数中轻松获取的 html

于 2013-01-05T13:53:16.883 回答