开发者

Django Template Tags in Views

开发者 https://www.devze.com 2023-02-12 04:17 出处:网络
Hi I need to refresh my custom template tag --right_side.py-- via Ajax. Is there a way to import the template tag in the view and return it as HttpResponse 开发者_如何学Pythonbecause I don\'t want to

Hi I need to refresh my custom template tag --right_side.py-- via Ajax. Is there a way to import the template tag in the view and return it as HttpResponse 开发者_如何学Pythonbecause I don't want to give up my custom template tag (it works great in other pages) nor code a new view action which is really similar to it.

Having a link to call with Ajax or loading it in the view inside

if request.isAjax():

Are both fine for me.


I find it really useful when refreshing an area with ajax. So thought it would be good to share it:

First you import the custom template tag you coded in your view file.

from your_app_name.templatetags import your_tag_name 

And then you use it like this:

return HttpResponse(your_tag_name.your_method(context))

That worked for me and I got the template tag as response from server and refreshed the div with that result.


I had this same question awhile ago, I was loading HTML snippets with AJAX which I had already written as template tags. And I was trying to avoid duplicating the code in two places.

This is what I came up with to render a template tag from a view (called via 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))


You could create a template just containing your templatetag and nothing else. Then you would have in right_side.html:

{%load cems_templatetags%}
{%right_side%}

and in the view something like:

if request.isAjax():
  return render_to_response('right_side.html',RequestContext(request))


I found this solution :

from templatetags_file_name import my_templatetag
return render (request,'path/to/template.html', my_templatetag(parameter) )

And, in my "templatetags_file_name", "my_templatetag" is like that :

@register.inclusion_tag('path/to/template.html') 
def my_templatetag(parameter):
    #my operations
    return locals()
0

精彩评论

暂无评论...
验证码 换一张
取 消