在我的Django模板中:
<div class="A">
{% url renders_data object.id %}
</div>
<div class="B">
{% render_data object.id %}
</div>
Div A
是在views.py
中调用方法的常用方法,而Div B
用于模板标记。
用户将打开一个链接。假设:/myapp/test/
页面将打开,页面上包含两个模板标记部分。此代码的名称为render_data
我想使用Ajax
将数据加载到每个模板代码中。要使用它,我们需要request.ajax:
。这就是为什么我想写出观点方法。我想用以下方式完成它:
template tag
中写了views.py
的确切副本(带有传递object_id参数的renders_data)并将其渲染到正确的模板。从模板中删除maypp/test
后打开div A
时。除了数据之外,它在每个模板标签部分(每个角落)中显示URL
(myapp/test/<object_id>
)。除了此网址See the image when i choose this option 之外,他们是否有可能展示上下文
renders_data
)中导入视图方法(render_data
)。因此,数据将显示在每个角落,request.Ajax:
也将起作用。如果这可能,那怎么样?
我无法解决此问题。请帮帮我:(
了解render_data的外观:
@register.simple_tag
def render_widget(object_id):
from myapp.plugins.model import Widgetsetting
widget_setting = Widetsetting.objects.get(id = object_id)
widget = widget_settings.get_widget()
template_name = widget.template_name
context = widget.context(widget=widget_settings)
t = get_template("widgets/%s" % template_name)
return t.render(Context(context))
答案 0 :(得分:1)
从您发布的代码中,下面的内容应该有效......
在views.py中:
from django.http import HttpResponse
from netadmin.plugins.templatetags.widgets import render_widget
def ajax_render_data(request, object_id):
return HttpResponse(render_widget(object_id))
你的django模板中的:
(你说你想要在页面上有几个这样的,所以我将在django模板中使用一个循环,我不知道你的widget集合被调用了什么,但我相信你可以为你的特定工作情况下)
<div class="widgets-container">
{% for widget_settings in widgetsettings.objects.all %}
<div class="widget-content" id="widget-content-{{ widget_settings.pk }}">
not loaded yet
</div>
{% endfor %}
</div>
<script>
// here we use django to render the ajax urls into an object
// in javascript so we can use it on the client side
var ajax_urls = {
{% for widget_settings in widgetsettings.objects.all %}
"{{ widget_settings.pk }}: "{% url ajax_render_data widget_settings.pk %}"{% if not forloop.last %},{% endif %}
{% endfor %}
};
// (I'll assume you're using jQuery)
// start the ajax calls when the page is loaded:
$(document).ready(loadWidgets());
function loadWidgets() {
// loop over the urls we provided from django:
jQuery.each(ajax_urls, function(widget_id, url) {
// do the ajax call:
$.get(url, function(data) {
// put the content into the widget div:
$('#widget-content-'+widget_id).html(data);
});
});
}
</script>
在urls.py中:
urlpatterns += patterns('netadmin.plugins.ajax_view',
url(r'^ajax/(?P<object_id>\d+)/$', 'ajax_render_data', name='ajax_render_data'),
)