您好我需要通过Ajax刷新我的自定义模板标签--right_side.py--。有没有办法在视图中导入模板标签并将其作为HttpResponse返回,因为我不想放弃我的自定义模板标签(它在其他页面中工作得很好),也没有编写一个与它真正相似的新视图操作。
有一个用Ajax调用的链接或在
里面的视图中加载它如果request.isAjax():
对我来说都很好。
答案 0 :(得分:10)
我发现使用ajax刷新区域时非常有用。所以认为分享它会很好:
首先导入您在视图文件中编码的自定义模板标记。
from your_app_name.templatetags import your_tag_name
然后你就这样使用它:
return HttpResponse(your_tag_name.your_method(context))
这对我有用,我得到了模板标签作为服务器的响应,并用该结果刷新了div。
答案 1 :(得分:10)
前一段时间我有同样的问题,我正在使用AJAX加载HTML片段,我已将其作为模板标签编写。我试图避免在两个地方重复代码。
这就是我从视图中渲染模板标记(通过ajax调用)的原因:
from django.template import RequestContext, Template
def myview(req):
context = RequestContext({'somearg':"FooBarBaz"})
template_string = """
{% load my_tag from tagsandfilters %}
{% my_tag somearg %}
"""
t = Template(template_string)
return HttpResponse(t.render(context))
答案 2 :(得分:0)
您可以创建一个仅包含模板标签的模板,而不是其他内容。然后你会在right_side.html:
{%load cems_templatetags%}
{%right_side%}
并在视图中显示:
if request.isAjax():
return render_to_response('right_side.html',RequestContext(request))
答案 3 :(得分:0)
我找到了这个解决方案:
from templatetags_file_name import my_templatetag
return render (request,'path/to/template.html', my_templatetag(parameter) )
而且,在我的“ templatetags_file_name”中,“ my_templatetag”就是这样:
@register.inclusion_tag('path/to/template.html')
def my_templatetag(parameter):
#my operations
return locals()