【问题标题】:Django - How to put a list in an urlDjango - 如何将列表放入 url
【发布时间】:2016-06-09 13:08:04
【问题描述】:

我正在视图中创建一个列表以显示加载的 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 %}

【问题讨论】:

  • 您不能将该 CSV 存储在模型中吗?如果是,你可以写一个view 来显示这个列表和一个引用pk
  • 我无法使用模型,因为我没有存储 csv 的元素,因为当用户登录我的网站时,csv 只是在媒体上“临时加载”。
  • 你显然想用这个列表和 URL 做什么?
  • 例如,它们是我的 csv 中的元素:[['NumeroProduit', 'NumeroSerie'], ['SUPP-MC67-01110', '20160428'], ['PACE-MK25-03265 ', '10035701']],我想在另一个视图上保存或转移此列表,以使用元素编写模板并打印它们。我选择 url 因为我可以获得列表(比如 get_object() for pk)
  • 好的,pk 指的是什么?

标签: python django csv django-1.9


【解决方案1】:

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

当然,您将无法将整个列表作为 url 参数传递 - 如果文件大于允许的 url 长度 - 它将失败。其他问题是性能问题,甚至是清晰度问题。

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

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

【讨论】:

    【解决方案2】:

    很抱歉我的缺席,我找到了解决问题的方法。

    为此,我将我的 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)
    

    【讨论】:

      猜你喜欢
      • 2014-09-30
      • 1970-01-01
      • 2021-05-28
      • 2021-11-12
      • 2022-12-21
      • 1970-01-01
      • 2015-03-05
      • 2020-06-27
      • 2021-07-02
      相关资源
      最近更新 更多