这将是一个非常基本的问题如何将Django与angularjs 集成。我使用Django开发了一个Web应用程序。在views.py中,我想用json转储我的数据从数据库,但我没有任何想法,或者你可以说我无法开始这个过程。我对Angularjs有一个非常基本的知识水平。如果你举一些例子,那么它将帮助我开始在Angularjs使用Django。为了更方便,这里是我生成的示例视图..
def userphoto(request):
user_photo = Photo.objects.get(user = request.user)
context = RequestContext(request)
ctx_dict = {'user_photo': user_photo}
return render_to_response('userena/profile_detail.html',ctx_dict,context)
这里 ctx_dict 直接渲染成html文件,但我想使用Angularjs渲染它们,可能使用json和http获取请求来使用Angularjs http服务实现数据。我可以这样做吗?提到我是angularjs的新手。
答案 0 :(得分:1)
你可以使用django-angular,但我觉得这个包也是WIP。
您应该考虑使用AJAX而不仅仅是渲染。这取决于问题。
我建议使用普通django或添加tastypie或django-rest-framework。我目前使用普通的django视图。
是的,要将模型数据发送回角度,您应该提供数据的JSON,您应该序列化您的模型。但!有很多问题和捕获。首先,你不需要模型中的所有东西。因为用户可以访问一些奇怪的字段。因为您发送的数据太多,所以不能在客户端使用。
因此,您应该将项目数据序列化为包含所需字段的JSON。以下是我如何做的示例:
@ajax_request
@login_required
def mydata_ajax(request):
qs = MyData.objects.all()
#add possible filters
if request.GET.get('search'):
s = request.GET.get('search')
qs = qs.filter(
Q(name__icontains=s) |
Q(email__icontains=s) |
Q(address__icontains=s) |
)
qs = qs.order_by('task_time', 'name')
#setup pagination so angular will retrieve data page by page
pages = Paginator(qs, 20)
try:
current_page = int(request.GET.get('page', 1))
except ValueError:
current_page = 1
if current_page > pages.num_pages:
current_page = 1
#get reguested page
page = pages.page(current_page)
#create response
return {
'total': pages.count,
'num_pages': pages.num_pages,
'page': current_page,
'data': [{
'id': o.id,
'name': o.name,
'email': o.email,
'address': o.address,
} for o in page.object_list]
}
首先,我使用来自django-annoying包的ajax_request
装饰器作为我的视图,它希望视图返回列表,字典或任何其他简单数据,因此它将automatically
序列化(转换)它为JSON。
有一些方便的东西,比如过滤器和分页的例子,顺便说一句。
答案 1 :(得分:0)