Django Python - 以用户友好的方式向models.py显示数据,从models.py到HTML模板

时间:2016-04-18 16:08:47

标签: python django

我使用Django作为项目的web框架。我无法将保存到models.py中的数据显示到我的html页面。我可以通过使用objects.all()函数查询数据库来显示某些内容,但它不会以用户友好的方式显示。我不知道如何格式化它。对于一些背景知识,我们正在使用Python的textblob包进行情感分析。分析在analysis.py中执行,并通过使用Django提供的call_command(analysis)在views.py中调用。

以下是我们的内容:

analysis.py

    pt_terrible = SentimentPercentage(pt_terrible = (len(terrible_list)/len(activity_text_list)))
    pt_terrible.save()
    pt_bad = SentimentPercentage(pt_bad = (len(bad_list)/len(activity_text_list)))
    pt_bad.save()
    pt_neutral = SentimentPercentage(pt_neutral = (len(neutral_list)/len(activity_text_list)))
    pt_neutral.save()
    pt_good = SentimentPercentage(pt_good = (len(good_list)/len(activity_text_list)))
    pt_good.save()
    pt_excellent = SentimentPercentage(pt_excellent = (len(excellent_list)/len(activity_text_list)))
    pt_excellent.save()

models.py

class SentimentPercentage(models.Model):
    pt_terrible = models.FloatField(null=True, blank=True)
    pt_bad = models.FloatField(null=True, blank=True)
    pt_neutral = models.FloatField(null=True, blank=True)
    pt_good = models.FloatField(null=True, blank=True)
    pt_excellent = models.FloatField(null=True, blank=True)

    def __str__(self):
        return '%f' % (self.pt_terrible)

此时我只是试图返回存储在pt_terrible中的数据...但是,我想最终返回存储在这些属性中的每个值。

views.py

from django.http import HttpResponse
from django.http import HttpRequest
from django.shortcuts import render
from django.core.management import call_command
from sawa.models import Sentiment, SentimentPercentage

def results(request):
    sentiment = call_command('analysis')
    pt_sentiment = SentimentPercentage.objects.all()

    context = {'pt_sentiment': pt_sentiment, 'sentiment': sentiment}
    return render(request, 'sawa/results.html', context)

results.html

           <form>
                <fieldset>

                    <!-- RESULTS WILL BE POSTED HERE -->

                    <div>{{pt_sentiment}}</div>


                    <p>RESULTS WILL BE POSTED HERE</p>
                </fieldset>
            </form>

以下是我保持链接的结果:

如何以更加用户友好的方式显示这些结果?有点像:

可怕评论百分比:0.30% 差评的百分比:4%......等等。

如果您有任何建议,请告诉我,我觉得它与我查询数据的方式有关,然后我如何在results.html中格式化它。

我有更好的格式化结果!但现在我需要从列表中删除所有重复项并删除没有值的项目..下面是我在图像中收到的结果的一部分:

编辑问题

Result with for loop in results.html template

Result without for loop and just variable reference in results.html template

1 个答案:

答案 0 :(得分:1)

您拥有的显示就像打印预期的SentimentPercentage个对象列表一样。

要摆脱方括号[],您需要知道它代表python列表表示法,因此循环遍历列表将是第一步:

{% for item in pt_sentiment %}
    {{ item }}
{% endfor %}

其次,<SentimentPercentage: 0.003021>__unicode__模型对象的SentimentPercentage表示形式。如果您需要打印pt_terriblept_bad的百分比,则需要在模型中使用方法来显示它们。一个好的做法是python property methods

class SentimentPercentage(models.Model)
    # your fields
    @property
    def show_pt_bad(self):
        return '%f' % self.pt_bad

然后你会这样做:

{% for item in pt_sentiment %}
    Percent of Bad Reviews: {{ item.show_pt_bad }}
{% endfor %}

修改

要删除重复项,请执行以下操作:

pt_sentiment = SentimentPercentage.objects.all().distinct()

您应该阅读how to make queries in django