如何在Django网页上的表格中显示我的python代码?

时间:2018-07-12 11:32:05

标签: python django pandas django-templates django-views

我用Python编写了一些代码,该代码读取两个字符串,删除标点符号,然后在矩阵表中比较它们中的单词,并将其打印到控制台。

我如何转换要在Django框架内使用的代码。我想在网上显示类似的矩阵。我已经将其导入视图。请有人指出我正确的方向吗?我一直在使用django project和lynda进行学习,

编辑:

Merci帮忙的人。设法使其显示在网页上。但它会将所有内容打印为单个字符串。我该如何设计更好的风格?

originalpythoncode djangowebpage

2 个答案:

答案 0 :(得分:2)

将数据传递到“ Django网页”就像从Django视图中将值的字典传递到Django模板一样。

什么是Django模板? Django模板是Django的“ MTV”设计模式中的“ T”。在常规的MVC设计模式(模型-视图-控制器)中,视图是您显示事物的地方。在Django中,模板是您显示内容的地方。奇怪的是,Django中的“视图”实际上是控制器。这花了我一段时间来缠住我的头。

我们为什么要使用类似字典的上下文? 通过将键映射到值,我们可以在Django模板中实现超快速的[O(1)/ constant]查找。

考虑到所有这些,我建议使用“ TemplateView”通用视图,在utils文件中进行工作,将utils导入视图,然后通过上下文字典将数据传递到模板。所以看起来像这样:

local_utils.py

import string
import pandas as pd
pd.set_option('display.max_columns', None)

def generate_out_matrix():

    with open('./arrayattempts/samp.txt', 'r') as file1:
        sampInput=file1.read().replace('\n', '')
        #print(sampInput)

    with open('./arrayattempts/ref.txt', 'r') as file2:
        refInput=file2.read().replace('\n', '')
        #print(refInput)

    sampArray = [word.strip(string.punctuation) for word in sampInput.split()]
    refArray = [word.strip(string.punctuation) for word in refInput.split()]

    out=pd.DataFrame(index=refArray,columns=sampArray)

    for i in range(0, out.shape[0]):
        for word in sampArray:
            out.ix[i,str(word)] = out.index[i].count(str(word))

    return out.as_matrix()

views.py

from appname.local_utils import generate_out_matrix
class Detail(TemplateView):      
    template_name = 'appname/yourhtml.html'

    # Will render on each call to URL for 'Detail'
    def get_context_data(self):
        out = generate_out_matrix()
        context['out'] = out
        return context

appname / templates / yourhtml.html

{% if out %}
    {% for row in out_matrix %}
         {% for o in row %} 
              {{ o }}
         {% endfor %}
         <br>
    {% endfor %}
{% endif %}

urls.py

path('/your_path', views.Detail.as_view()),

https://docs.djangoproject.com/en/2.0/ref/templates/api/#rendering-a-context

答案 1 :(得分:1)

要将数据发送到模板,您应该在视图中将变量添加到上下文中

from django.http import Http404
from django.shortcuts import render
from polls.models import Poll

def detail(request, poll_id):
    ... // your logic
    out // your variable
    return render(request, 'yourhtml.html', {'out': out})

在html中会是这样

{{ out }}

{% for o in out %}
    {{ o }}
{% endfor %}

https://docs.djangoproject.com/en/2.0/topics/http/views/

您可以使用一些CSS样式化表格或使用ny lib结构来处理表格

您可以遵循本指南

display django-pandas dataframe in a django template