2

我最近开始学习 jQuery,现在我正在玩 .ajax() 函数。

我不知道如何在 Django 中访问 get 参数。

我的代码如下所示:

jQuery & html:

<div id="browser">
    <ul>

    {% comment %}
        Theres a script for each ctg. Each script fades out #astream, fades in #stream_loading and then it should display #astream with new values based on the GET param in ajax call
        Prolly it wont work, but first I need to interact with the GET param in my views.py
    {% endcomment %}

    {% for ctg in ctgs %}
        <script type="text/javascript" charset="utf-8">
            (function($) {
                $(document).ready(function() {
                    $("#stream_loading").hide()

                    $("#browse_{{ctg}}").click(function() {

                        $("#astream").fadeOut()
                        $("#stream_loading").fadeIn()

                        $.ajax({
                            type: "GET",
                            url: "/{{defo}}/?param={{ctg}}",
                            success: function() {
                                $("#stream_loading").fadeOut()

                                $("#astream").fadeIn()
                            }
                        });
                    });
                });
            })(jQuery);
        </script>
        <li><a id="browse_{{ctg}}" title="{{ctg}}">{{ctg}}</a></li>
    {% endfor %}
    </ul>
</div>
<div id="astream">
    {{ajaxGet}} #just to see whats rendered
    {% include "astream.html" %}
</div>

<div id="stream_loading">
    loading stream, please wait ...
</div>

姜戈:

@https_off
def index(request, template='index.html'):

    request.session.set_test_cookie()

    path=request.META.get('PATH_INFO')
    defo=path[1:path[1:].find('/')+1]
    request.session['defo']=defo
    defo=request.session['defo']

    # build the stream sorted by -pub_date
    import itertools

    chained=itertools.chain(
        model1.objects.order_by('-pub_date').filter(),
        model2.objects.order_by('-pub_date').filter(),
    )

    stream=sorted(chained, key=lambda x: x.pub_date, reverse=True)

    ajaxGet=request.GET.get('param','dummy')

    if request.is_ajax():
        template='astream.html'
        ajaxGet=request.GET.get('param',False)

    renderParams={'defo':defo, 'stream':stream, 'ajaxGet':ajaxGet}

    return render_to_response(template, renderParams, context_instance=RequestContext(request))

然后我尝试在我的模板中显示它

{{ ajaxGet }}

但每次都被渲染为“虚拟”

在萤火虫中,我可以看到使用正确的键和值获取请求。

我在这里想念什么?

谢谢

4

1 回答 1

2

人们在执行这种 Ajax 时经常遇到一个常见的问题,这并没有阻止链接/按钮的默认操作。因此,您的 Ajax 函数永远没有机会触发,而您在 Django 代码中看到的请求是由正常的页面加载引起的——这就是is_ajax()错误的原因。

click处理程序一个参数,event,并event.preventDefault();在函数结束时调用。

于 2012-04-27T15:38:26.887 回答