без использования популярных пакетов dajaxic и dajax, это все еще простое дело.
Было бы полезно написать декоратор, который просто обернул бы функцию is_ajax () в django для объектов запроса, например так:
def ajax_request(function):
def wrapper(request, *args, **kwargs):
if not request.is_ajax():
return render_to_response('error/ajax_required.html', {},
context_instance=RequestContext(request))
else:
return function(request, *args, **kwargs)
return wrapper
при условии, что существует шаблон с именем ajax_required для обработки этого конкретного сбоя.Что-то вроде этого не позволяет пользователю вводить ваш определенный URL-адрес ajax в браузере, если вы этого не хотите.
Поскольку это делается для более короткого примера, ниже приведено представление ajax на основе классов, которое отображает шаблон..
from django.views.generic.base import TemplateView
class AjaxGeneral(TemplateView):
template_name= None
def get(self, request):
data={}
return render_to_response(self.template_name, data,
context_instance=RequestContext(request))
@method_decorator(ajax_request)
def dispatch(self, *args, **kwargs):
return super(AjaxGeneral, self).dispatch(*args, **kwargs)
теперь для всего ajax, который просто необходим для рендеринга фрагмента html, вы можете определять короткие представления на основе классов, такие как:
class ShowSomeTable(AjaxGeneral):
template_name="some_table.html"
Предполагая, что в some_table.html есть некоторый фрагмент html..
Теперь ваша запись urls.py для этого представления будет выглядеть так:
url(r'showtable/$', ShowSomeTable.as_view()),
, и вы можете вызывать ее в js как обычно:
$(#dynamic-content).load('/showtable');