Django:如何有效显示模板中的数据?

时间:2018-08-26 19:15:57

标签: python css django django-templates

我以数字形式将用户的可用性保存在数据库中。 1 用户可用, 0 不可用。例如,如果某个用户在周一的早上和晚上有空,但白天没有空,则在我的数据库中,我将有“ 101 ” 现在,我想向用户显示其可用性。 我的想法是,对于每种情况,我都会创建并显示不同的图像。 不幸的是,7天的可能性太多了。

我的问题是如何有效地在模板中显示此数据?

我开始写我的观点,这里是:

    if request.user.is_authenticated:
    try:
        name = coach.objects.get(user=request.user)
    except coach.DoesNotExist:
        name = coach(user=request.user)
    objs = Lesson.objects.all().filter(mycoach = name)
    args = {'objs': objs}
    if name.monday=="111" and name.tuesday=="111" and name.wednesday=="111" and name.thursday=="111" and name.friday=="111" and name.saturday=="111" and name.sunday=="111" :
        args['image_url'] = static('img/111111111111111111111.pdf')
    if name.monday=="011" and name.tuesday=="111" and name.wednesday=="111" and name.thursday=="111" and name.friday=="111" and name.saturday=="111" and name.sunday=="111" :
        args['image_url'] = static('img/011111111111111111111.pdf')

    messages.add_message(request, messages.INFO, 'Welcome to your profile')
    return render(request, 'Task.html', args)
else:
    return render(request, 'home.html')

2 个答案:

答案 0 :(得分:2)

生成图像名称

我们可以通过将日期的配置“结合”在一起来“生成”图像URL的名称,例如:

args['image_url'] = static(
    'img/{}{}{}{}{}{}{}.pdf'.format(
        name.monday,
        name.tuesday,
        name.wednesday,
        name.thursday,
        name.friday,
        name.saturday,
        name.sunday
    )
)

但这仍然意味着您将需要生成 2 21 = 2'097'152 张图像。

生成图像列表

所以我想知道显示七个图像(一个图像一个接一个)是否效率更高,因此将其视为七个图像的列表,每个图像有八种可能性。因此我们将视图“运送”为:

args['image_urls'] = {
    k: static('img/{}.pdf'.format(getattr(name, k)))
    for k in ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday']
}

这意味着模板看起来像这样:

<!-- my schedule -->
<img src="{{ image_urls.monday }}">
<img src="{{ image_urls.tuesday }}">
<img src="{{ image_urls.wednesday }}">
<img src="{{ image_urls.thursday }}">
<img src="{{ image_urls.friday }}">
<img src="{{ image_urls.saturday }}">
<img src="{{ image_urls.sunday }}">

然后,您只需要生成eigh图像即可:000.pdf001.pdf010.pdf

答案 1 :(得分:1)

如果您已经准备好所有可能的图像,则可以这样获得图像路径:

args['image_url'] = static('img/{}{}{}{}{}{}{}.pdf'.format(
    name.monday, name.tuesday, name.wednesday, name.thursday, name.friday, name.saturday, name.sunday
))

或者您可以在模板中的HTML / CSS / javascript中进行一些动态表示。使用js库为表格着色或生成某些图形,以访问模板中的数据:{{name.monday.0}},以获取周一上午的可用时间,等等...

请参见Django template language doc