Django: выбрать все данные из строки в html-таблице и использовать их в представлении
Я новичок как в django, так и в веб-разработке.
Задача состоит в том, чтобы при нажатии на кнопку запускался скрипт, использующий данные, содержащиеся в конкретной строке html-таблицы.
То есть если я нажимаю на вторую кнопку "Запустить скрипт", то он использует все данные в этой строке (8888, 2020/06/21 06:00) в отдельном скрипте для выполнения некоторой задачи.
В настоящее время мой html файл выглядит следующим образом: Есть 2 раздела один для продвижения информации, которая идет в таблицу один таблица, которая отображает их
<h1>Approach Path KML Generator</h1>
<h2>Generate the KML file here:</h2> <form method="post" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button onclick="location.href='{% url 'approach_path_receptorsKML:Proejct Creator' %}'">Upload</button> </form>
<h2>Projects Available:</h2>
<table class="table">
<thead>
<tr>
<th>Project ID</th>
<th>Date KML</th>
<th>Time KML</th>
<th>Date-Time Uploaded</th>
<th>Run The Conversion</th>
<th>KML File</th>
</tr>
</thead>
<tbody>
{% for project in latest_project_list %}
<tr>
<td>{{ project.project_ID }}</td>
<td>{{ project.date_kml }}</td>
<td>{{ project.time_kml }}</td>
<td>{{ project.upload_time }}</td>
<td>
<button method="post" value="collect data" name="{{ project.project_ID }}|{{ project.date_kml }}|{{ project.time_kml }}|{{ project.upload_time }}">Run script</button>
</td>
<td>
<a href="{{ project.download_doc }}" class="btn btn-primary btn-sm">Download KML File</a>
</td>
</tr>
{% endfor %}
</tbody> </table>
А это представление, которое я создал:
def ProjectCreator(request):
form = DocumentForm()
if request.method == 'POST':
form = DocumentForm(request.POST, request.FILES)
if form.is_valid:
form.save()
elif 'collect data' in request.POST.values():
values = [key for key in request.POST.keys()]
print(values)
else:form = DocumentForm()
Я пытался использовать это руководство (Как передать данные таблицы из шаблона в Django при нажатии на кнопку/сабмит? ), но у меня ничего не получилось.
Если кто-нибудь сможет заметить ошибку, которую я допустил, и дать мне объяснение, я буду благодарен.
Спасибо
Не работает, потому что у вас неправильная HTML-разметка. Сама кнопка ничего не делает - для отправки POST-запроса она должна находиться в теге <form>
. Попробуйте сделать следующее:
{% for project in latest_project_list %}
<tr>
<td>{{ project.project_ID }}</td>
<td>{{ project.date_kml }}</td>
<td>{{ project.time_kml }}</td>
<td>{{ project.upload_time }}</td>
<td>
<form method="post">
{% csrf_token %}
<button value="collect data"
name="{{ project.project_ID }}|{{ project.date_kml }}|{{ project.time_kml }}|{{ project.upload_time }}">
Run script
</button>
</form>
</td>
<td>
<a href="{{ project.download_doc }}" class="btn btn-primary btn-sm">Download KML File</a>
</td>
</tr>
{% endfor %}
Это будет работать, но я сомневаюсь, что это отличный способ достижения цели. Вы можете просто отправить project.pk
с POST запросом и получить project
в представлении. Таким образом, вы можете быть уверены, что пользователь не отправит с запросом неверные/вредоносные данные. Это особенно важно, так как ваш код будет выполнять скрипт, основанный на данных.