django onclick使用ajax将模板加载到{%block%}

时间:2012-07-26 12:35:38

标签: ajax django

我在django中创建一个web应用程序,我非常新。 我想要做的是在用户点击打开一个模态窗口(基本上只是一个absloute定位div),其中包含一个{%block some_content%}标签。然后,此块应包含登录表单或注册表单(或其他任何内容)。我想使用ajax加载它(这样就没有任何东西都是徒劳的)。

这是我模板的一部分,我希望这些内容出现:

    <div id="modal" style="position: absolute; top: 60px; left: 100px; height: 400px; width:700px; background: #777; z-index: 20">

        <a href="#" onclick="Dajaxice.my_site.tester1(test_callback, {'user_id': '{{ user.id }}'})"><div class="button">Test</div></a>
        <br />

        {% block test_content %}{% endblock test_content  %}
    </div>

这是我的ajax.py

    @dajaxice_register
    def tester1(request, user_id):
        print "test " + user_id
        #contenxt = Context({'items': range(2)})
        print "1"
        return_str = render_block_to_string('my_site/testr.html', 'test_content')
        print "7"
        return HttpResponse(return_str)

我正在使用代码段http://djangosnippets.org/snippets/942/

在印刷品“#”之后让我相信这一直到

    return HttpResponse(return_str)

似乎没有任何事情发生,甚至没有错误信息。

忘了包含我要加载到块的模板:

    {% extends "my_site/header.html" %}
    {% load url from future %}

    {% block test_content %}
        <div style="background: red; height: 70%; width:90%">
            <span>HEJ!!!</span>
        </div>
    {% endblock test_content %}

如果有更好的方法我会很高兴知道它,但请记住,我是django的新手所以请慢点。

2 个答案:

答案 0 :(得分:1)

您似乎正在使用Dajax framework。看看那里的例子。 其中一些示例可能已过时,请查看this site。 如果您安装了Dajax和Dajaxice,则可以执行类似

的操作
<div id="test_content"></div>
<a href = "#" onclick="Dajaxice.<app_name>.ajax_test">load ajax content</a>

你应用中的ajax.py

@dajaxice_register
def ajax_test:
    str = 'Hello World'
    dajax = Dajax()
    dajax.assign('#test_content', 'innerHTML', str)
    return dajax.json()

答案 1 :(得分:1)

所以,这是我的解决方案:

我安装了Dajax。它不起作用的原因如下,但这是一个有效的完整解决方案。

HTML:

<input type="button" name="testerbutton" value="Test" id="testerbutton" onclick="Dajaxice.my_site.tester1(Dajax.process);">
<br />
<div name="result" value="" id="result">

ajax.py:

@dajaxice_register
def tester1(request):
    dajax = Dajax()
    str = render_to_string('my_site/testr.html')
    dajax.assign('#result', 'innerHTML', str)
    return dajax.json()

testr.html:

<div style="background: red; height: 70%; width:90%">
    <span>HEJ!!!</span>
</div>

最重要的部分 - 看起来我只能责怪自己:确保在标题中正确导入jquery.dajax.core.js。否则Dajax.process什么都不做。

感谢@pyronic的帮助。