Django通过ajax get在模板中渲染字典对象

时间:2014-04-19 18:55:02

标签: jquery python ajax django dictionary

嘿伙计们我想弄清楚如何通过ajax做一个GET请求来返回一个字典对象,我可以使用Django的模板标签迭代并显示结果。我似乎无法弄清楚这一点。任何帮助是极大的赞赏。感谢。

的Ajax / HTML:

        $("#{{fabCatagory.categoryId}}btn").click(function(){

              $.ajax({

                       type: 'GET',
                       url: '/companion/topic/{{fabCatagory}}/',

                       success: function(result){
                       console.log(result['topics'])
                       },
                     });
                    });





    <div id="{{fabCatagory.categoryId}}" class="panel-collapse collapse">
       <div class="panel-body">

         <div class="list-group">
            {%for fabCatagory in topics %}

               <a id="{{ fabCatagory.topicId }}" class="list-group-item">{{ fabCatagory.topic }}</a>

            {% endfor %}
        </div>
     </div>
   </div>

查看:

@render_to ('companion/companionSub.html')
def topic(request, id):   

    ids = Catagories.objects.get(catagory=id)
    topics = Topics.objects.filter(fabCatagory_id=ids.id).all()
    topic_list = {'topics':topics}
    return HttpResponse({'topics':topics})

更新:::添加模型。

from django.db import models
from embed_video.fields import EmbedVideoField
from imagekit.models import ProcessedImageField
from imagekit.processors import ResizeToFill

class Catagories(models.Model):
   catagory = models.CharField(max_length=128)
   categoryId = models.CharField(max_length=128)
   def __unicode__(self):
    return self.catagory 

class Topics(models.Model):
   fabCatagory = models.ForeignKey(Catagories)
   topic = models.CharField(max_length=128)
   topicId = models.CharField(max_length=128)
   def __unicode__(self):
    return self.topic 

class Fabrics(models.Model):
   fabTopic = models.ForeignKey(Topics)
   fabName = models.CharField(max_length=128)
   fabContent = models.CharField(max_length=128, blank=True)
   fabWeave = models.CharField(max_length=128, blank=True)
   fabDye = models.CharField(max_length=128, blank=True)
   fabFinish = models.CharField(max_length=128, blank=True)
   fabDescription = models.CharField(max_length=8192) 
   fabImage = ProcessedImageField(upload_to='avatars',
                                       processors=[ResizeToFill(250, 185)],
                                       format='JPEG',
                                       options={'quality': 60},blank=True) 
   fabImage_secondary = ProcessedImageField(upload_to='avatars',
                                       processors=[ResizeToFill(500, 370)],
                                       format='JPEG',
                                       options={'quality': 60},blank=True)
   fabVideo = EmbedVideoField(blank=True)
   fabVideoURL = models.URLField(blank=True)
   isPremium = models.BooleanField(default=False)
   def __unicode__(self):
    return self.fabName  

1 个答案:

答案 0 :(得分:2)

你需要为jQuery返回一个json对象才能理解。

试试这个:

import json
from django.forms.models import model_to_dict

@render_to ('companion/companionSub.html')
def topic(request, id):   

    ids = Catagories.objects.get(catagory=id)

    topics = [model_to_dict(topic) for topic in Topics.objects.filter(fabCatagory_id=ids.id)]
    topic_list = json.dumps({'topics':topics})

    return HttpResponse(topics_list)