视图中的Django模板标签

时间:2011-02-21 16:10:53

标签: django django-templates

您好我需要通过Ajax刷新我的自定义模板标签--right_side.py--。有没有办法在视图中导入模板标签并将其作为HttpResponse返回,因为我不想放弃我的自定义模板标签(它在其他页面中工作得很好),也没有编写一个与它真正相似的新视图操作。

有一个用Ajax调用的链接或在

里面的视图中加载它

如果request.isAjax():

对我来说都很好。

4 个答案:

答案 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()