我使用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
答案 0 :(得分:1)
您拥有的显示就像打印预期的SentimentPercentage
个对象列表一样。
要摆脱方括号[]
,您需要知道它代表python列表表示法,因此循环遍历列表将是第一步:
{% for item in pt_sentiment %}
{{ item }}
{% endfor %}
其次,<SentimentPercentage: 0.003021>
是__unicode__
模型对象的SentimentPercentage
表示形式。如果您需要打印pt_terrible
或pt_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()