Теги шаблонов Django в представлениях - PullRequest
8 голосов
/ 21 февраля 2011

Привет! Мне нужно обновить свой пользовательский тег шаблона --right_side.py-- через Ajax. Есть ли способ импортировать тег шаблона в представлении и вернуть его как HttpResponse, потому что я не хочу ни отказываться от своего пользовательского тега шаблона (он прекрасно работает на других страницах), ни кодировать новое действие представления, которое действительно похоже на него ,

Наличие ссылки для вызова с Ajax или загрузка ее в виде внутри

если request.isAjax ():

Оба хороши для меня.

Ответы [ 4 ]

10 голосов
/ 24 февраля 2011

Я считаю это действительно полезным при обновлении области с помощью ajax. Поэтому подумал, что было бы хорошо поделиться этим:

Сначала вы импортируете пользовательский тег шаблона, который вы закодировали в файле просмотра.

from your_app_name.templatetags import your_tag_name 

А потом вы используете это так:

return HttpResponse(your_tag_name.your_method(context))

Это сработало для меня, и я получил тег шаблона в качестве ответа от сервера и обновил div с этим результатом.

10 голосов
/ 26 марта 2012

Некоторое время назад у меня был тот же вопрос, я загружал фрагменты HTML-кода с помощью AJAX, который я уже написал как теги шаблона. И я пытался избежать дублирования кода в двух местах.

Это то, что я придумал для рендеринга тега шаблона из представления (вызываемого через 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))
0 голосов
/ 21 июля 2018

Я нашел это решение:

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

И, в моем "templatetags_file_name", "my_templatetag" выглядит так:

0 голосов
/ 21 февраля 2011

Вы можете создать шаблон, содержащий только ваш тег шаблона и ничего больше.Тогда вы должны иметь в right_side.html:

{%load cems_templatetags%}
{%right_side%}

и в представлении что-то вроде:

if request.isAjax():
  return render_to_response('right_side.html',RequestContext(request))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...