Я хочу отредактировать нужный загруженный файл на веб-странице путем поиска и замены нужных слов.Как я могу получить текст этого файла документа?
У меня есть файловое поле в моих моделях, и я получаю файлы документа в списке на моей веб-странице, где я могу удалить нужный файл или загрузить новыйодин.Я пытаюсь отредактировать требуемый загруженный файл документа, создав функцию в моем views.py.Я пытался использовать модуль docx, чтобы открыть загруженный файл, а также пробовал io.StringIO (), но мне не удалось получить желаемый результат.
models.py
class DocFile(models.Model):
title = models.CharField(max_length=50)
agreement = models.FileField(upload_to='')
views.py
def edit_file(request, upload_id):
instance = get_object_or_404(DocFile, id=upload_id)
content = instance.agreement.open(mode='rb')
variables = []
for line in content:
match = re.findall(r"\{(.*?)\}", line.text)
variables.append(match)
return render(request, 'uploads/file_detail.html', {
'variables': variables
})
или
def edit_file(request, upload_id):
instance = get_object_or_404(DocFile, id=upload_id)
content = instance.agreement(upload_id)
with open(content, 'rb') as f:
instance.agreement = File(f)
source = io.StringIO(f)
document = Document(source)
variables = []
for paragraph in document.paragraphs:
match = re.findall(r"\{(.*?)\}", paragraph.text)
variables.append(match)
for table in document.tables:
for row in table.rows:
for cell in row.cells:
match = re.findall(r"\{(.*?)\}", cell.text)
variables.append(match)
source.close()
target = io.StringIO()
document.save(target)
return render(request, 'uploads/file_detail.html', {
'variables': variables
})
file_detail.html
{% block content %}
<form method="post">
{% csrf_token %}
{% if variables %}
{% for variable in variables %}
{% for var in variable %}
{{ var }} <br /><input type="text", name="statement">
<br />
<br />
{% endfor %}
{% endfor %}
<input type="submit" value="Download">
{% endif %}
</form>
<a href="{{ template.agreement }}" class="btn btn-primary btn-sm">
Edit
</a>
{% endblock %}
Когда я запускаю первую функцию просмотра, я получаю следующую ошибку:
AttributeError at /template/11/
'bytes' object has no attribute 'text'
И когда я запускаю второй метод функции просмотра, я получаю следующую ошибку:
TypeError at /template/11/
'FieldFile' object is not callable