【问题标题】:How to make statistics in django如何在 django 中进行统计
【发布时间】:2018-04-12 15:38:23
【问题描述】:

我正在使用 django fobi 来允许用户创建自己的表单。我想根据这些表格制作一些报告和统计数据。

我有一个工作 python 代码,但我不知道如何在 django 工作模板中“翻译”该代码。

数据如下:

saved_data = '''
  [
       [{
           "label": "Question 1?",
           "html_name": "question_1",
           "first_name": "John",
           "last_name": "Doe",
           "email": "john@doe.com",
           "answer": "Yes"
         }, {
           "label": "Question 2?",
           "html_name": "question_2",
           "first_name": "John",
           "last_name": "Doe",
           "email": "john@doe.com",
           "answer": ["Red", "White"]
       }],
       [{
           "label": "Question 1?",
           "html_name": "question_1",
           "first_name": "Jane",
           "last_name": "Mary",
           "email": "mary@jane.com",
           "answer": "No"
         }, {
           "label": "Question 2?",
           "html_name": "question_2",
           "first_name": "Jane",
           "last_name": "Mary",
           "email": "mary@jane.com",
           "answer": ["Red", "Black"]
         }]
  ]

'''

data = json.loads(saved_data)

answer = {}

for x in data:
    for y in x:
        if type(y['answer']) is list:
            for an in y['answer']:
                answer.setdefault(y['label'], {})\
                    .setdefault('answer', []).append(an)
                answer.setdefault(y['label'], {}).setdefault('full_name', []).append(y['first_name'] + ' ' + y['last_name'])
                answer.setdefault(y['label'], {}).setdefault('email', []).append(y['email'])
        elif type(y['answer']) is str:
            answer.setdefault(y['label'], {})\
                .setdefault('answer', []).append(y['answer'])
            answer.setdefault(y['label'], {}).setdefault('full_name', []).append(y['first_name'] + ' ' + y['last_name'])
            answer.setdefault(y['label'], {}).setdefault('email', []).append(y['email'])

for questions, answers in answer.items():
    print('\n', questions)
    counting = Counter(answers['answer'])
    for key, value in counting.items():
        print(key, value)
        for answer in zip(answers['full_name'], answers['answer']):
            if key == answer[1]:
                print(answer[0])

我怎样才能使它在 django 1.11 模板中工作?

【问题讨论】:

    标签: django


    【解决方案1】:

    您需要将其从view 传递到template。例如,您可以使用基于函数的视图来包装该逻辑并将其放入 views.py。您必须在 urls.py 中添加一个路由并让该视图返回一个模板。

    在模板中,您可以for 循环遍历答案项并根据需要显示它们。

    【讨论】:

    • 我了解 django 的基础知识。从我的示例中,我可以制作答案 dict 上下文并可以在模板中访问它。但我的问题是使用 Counter() 的代码更进一步。我无法在模板中导入它,然后运行示例的最后几行。
    • 啊抱歉,我会尝试一下,因为如果我的头是模板标签,我可以从顶部想到一个 hack,但可能有不同的方法来构建它
    • @Dragos 您可以在视图中进行所有计算,然后只将结果传递给模板,采用任何合适的结构。
    • @Paulo 你能举个例子吗?我在这个问题上工作了三个星期,但我看不到解决方案。我不知道如何从 for 循环返回上下文。
    • @Dragos 这个想法不是从循环中返回上下文,而是使用循环来创建传递给上下文的数据结构(例如字典、列表)。 this question中有一个简单的例子。
    猜你喜欢
    • 2022-06-23
    • 2022-08-16
    • 2012-05-19
    • 2017-08-06
    • 2012-01-25
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    • 2014-02-23
    相关资源
    最近更新 更多