без использования популярных пакетов 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');
person
yassi
schedule
16.11.2012