通过Ajax GET在模板中渲染Django字典对象

1 投票
1 回答
1870 浏览
提问于 2025-04-18 03:25

大家好,我正在尝试通过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 个回答

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)

撰写回答