Django: выбрать все данные из строки в html-таблице и использовать их в представлении

Я новичок как в django, так и в веб-разработке. Задача состоит в том, чтобы при нажатии на кнопку запускался скрипт, использующий данные, содержащиеся в конкретной строке html-таблицы. То есть если я нажимаю на вторую кнопку "Запустить скрипт", то он использует все данные в этой строке (8888, 2020/06/21 06:00) в отдельном скрипте для выполнения некоторой задачи. enter image description here

В настоящее время мой 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 в представлении. Таким образом, вы можете быть уверены, что пользователь не отправит с запросом неверные/вредоносные данные. Это особенно важно, так как ваш код будет выполнять скрипт, основанный на данных.

Вернуться на верх