如何通过Django中的视图将表数据作为不同的格式类型返回

时间:2015-06-26 15:32:53

标签: python django django-views

我有以下视图,它返回三个不同模型员工,见证和技能的数据,它完全有效。

Views.py

@page_template("app/profession.html") # just add this decorator
def profile(request, template="app/profession.html",
extra_context=None):
context = {
    'employ_V': Employees.objects.get(id = 45),
    'testim_V':Testimonial.objects.get(id = 45),
    'skills_V':Skills.objects.filter(id = 45),
}
if extra_context is not None:
    context.update(extra_context)
return render_to_response(template, context,
    context_instance=RequestContext(request))

如果您看到,将只为Employees和Testimonial模型返回一条记录(查询中的 Notice objects.get()) 而技能模型有超过1条记录(它返回id,技能,超过5行的订单字段)。

是否可以使用相同的视图将技能作为Json格式以及Employee和Testimonial返回到我的模板(纯文本和JSON)? 或者我应该使用单独的视图以Json格式返回技能模型的数据? 在这种情况下,最好的方法是什么。

在Skills的单独视图中 - 我可以用JSON格式成功实现结果 - 为此我使用了客户序列化器和JsonResponse。

1 个答案:

答案 0 :(得分:1)

您可以在查询集中使用Django values,但如果您需要特殊转换(如图片的缩略图等),请添加到您的模型as_dict方法

class YourModel(models.Model):
    # here your fields

    def as_dict(self):
        context = {
            'pk': self.id,
            'name': self.name,
            # ...
        }

        return context

然后在你的观点中

# import section 
from django.utils.safestring import mark_safe
# ...


@page_template("app/profession.html") # just add this decorator
def profile(request, template="app/profession.html", extra_context=None):

    employ_v_obj = Employees.objects.get(id=45)
    testim_v_obj = Testimonial.objects.get(id=45)
    skills_v_qs = Skills.objects.filter(id=45)

    skills_v_json_list = [obj.as_dict() for obj in skills_v_qs]

    context = {
        'employ_V': employ_v_obj,
        'testim_V': testim_v_obj,
    }

    context['skills_V_json'] = mark_safe(json.dumps(skills_v_json_list, ensure_ascii=False))

    if extra_context is not None:
        context.update(extra_context)

    return render_to_response(template, context, context_instance=RequestContext(request))