Django - 如何将列表放入网址

时间:2016-06-09 13:08:05

标签: python django csv django-1.9

我在视图中创建一个列表,以显示已加载的csv文件(def showCsv(request))中的元素。我希望获得此列表并将此列表放在URL重定向(第一个链接'a')中,但我不知道如何执行此操作。

def showCsv(request):
    if request.POST:
       object_pk = request.POST.get('pk')
       csvname = request.FILES['f']
       path = default_storage.save('media/csv', ContentFile(csvname.read()))
       tmp_file = os.path.join('', path)
       csvname = open(tmp_file, 'rb')

       reader = csv.reader(codecs.iterdecode(csvname, 'utf-8'), delimiter=";")
       list_test = []
       for row in reader:
           list_test.append((row))

    return render(request, 'website/show_csv.html',
    { 'app_version':APP_VERSION, 'object_pk':object_pk, 'list': list_test})

show_csv.html

{% block content %}
<div class="menu">
 <ul class="blockchoixcontinuer">
   <a href="{% url 'website:impression_publipostage' object_pk list %}"> Continuer </a>
 </ul>
  <ul class="blockchoixretour">
    <a href="{% url 'website:addcsv' object_pk %}"> Retour </a>
  </ul>
 </div>
 <div class="container" id="container">
 <div class="row">
  <table class="table table-striped col-md-12">
      <tbody>
            {% for row in list %}
              <tr>
                  <td>{{ row.0 }}</td>
                  <td>{{ row.1 }}</td>
              </tr>
            {% endfor %}
        </tbody>
    </table>
  </div>
 </div>
{% endblock %}

2 个答案:

答案 0 :(得分:0)

如果我理解这一点,你正在一个视图中读取一个列表(从上传的文件中获取它),然后你想将整个列表传递给另一个视图。

肯定你不能将整个列表作为url参数传递 - 如果文件大于允许的url长度 - 它将失败。其他问题是性能问题甚至是清晰度。

在视图之间传递数据有多种解决方案,但是您需要以某种方式在服务器端存储和保存数据,然后在视图之间传递一些标识符。

最简单的一种是使用数据库,更复杂 - 将数据存储到文件中(你已经有了这个文件),然后在会话中存储路径文件或通过参数传递给url,你可以将数据存储在缓存中(如果它不是那么大)等等。

答案 1 :(得分:0)

对不起我的缺席,我找到了解决问题的方法。

为了做到这一点,我在其他文件中写了我的csv的url,并在我的另一个视图中打开这个文件,这不是最好的主意,但它是有效的。 在您必须继续工作之后(添加元素,删除元素,在上下文中显示,...)。谢谢你的帮助。

ShowCsvView
path = default_storage.save('media/csv', ContentFile(csvname.read()))
    tmp_file = os.path.join('', path)
    csvname = open(tmp_file, 'rb')

    reader = csv.reader(codecs.iterdecode(csvname, 'utf-8'), delimiter=";")
    list_test = []
    for row in reader:
        list_test.append((row))

    f = io.open("media/list_file", "w")
    f.write(tmp_file)
    f.close()

CreatePdfView
list_element_csv = []
    with io.open("media/list_file", "r") as infile:
        str_path = infile.read()

    csvname = open(str_path, 'rb')
    reader = csv.reader(codecs.iterdecode(csvname, 'utf-8'), delimiter=";")
    for row in reader:
        list_element_csv.append(row)