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