Вызов функции из HTML в файл Python

У меня есть страница index.html со списком «карточек», где на каждой карточке есть ссылка «Нажмите, чтобы выбрать».

Когда пользователь нажимает на эту ссылку, я хотел бы вызвать функцию в Python, чтобы выбрать этот элемент, см.:

def selectItem(request, item):
    #so something with this item

Итак, на моей html-странице:

<div class = "card-action">
                            <a href = "{{ selectItem(myitem) }}">Selecionar</a>
                        </div>

Это не работает. Как правильно это делать?

Вам необходимо передать URL-адрес представлению, поэтому {% url 'view_name' item_id=myitem.id %}, учитывая, что это представление, и вы правильно обрабатываете URL-адрес. Кроме того, вы не можете просто передать объект, так как этот объект не может быть «доставлен». Вы можете, например, использовать id и выполнить соответствующую обработку в представлении (чтобы снова превратить id в объект).

Willem Van Onsem 09.09.2018 15:54
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
1
116
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете вызвать такую ​​функцию. Браузер запрашивает данные с помощью HTTP-запроса, а сервер отвечает (HTTP) ответом. У таких запросов есть URL-адрес, и Django может направить запрос - с URL-адресом - в правое представление, которое будет вычислять ответ.

Таким образом, нам нужно создать представление, которое затем можно будет вызвать. Ваш звонок уже совсем близко:

# app/views.py

from django.http import HttpResponse

def select_item(request, item_id):
    # so something with this item_id
    # ...
    return HttpResponse()

Поскольку большинство объектов не сериализуемы (и обычно вы этого не хотите, поскольку это может предоставить пользователю много (потенциально конфиденциальных) данных), нам, таким образом, необходимо работать с id (идентификатором, который, например, хранится в база данных, которая соответствует к объекту).

Ответ содержит данные в ответе. Часто это HTML-код, который затем обрабатывается браузером.

Теперь в urls.py мы можем указать, как выглядит URL, например:

# app/urls.py

from django.urls import path
from app.views import select_item

urlpatterns = [
    path('select_item/<int:item_id>/', select_item, name='select_item_view'),
    # ...
]

urlpatterns необходимо включить в корень urlpatterns (в корень проекта).

Теперь в шаблоне HTML мы можем сгенерировать URL-адрес, соответствующий этому представлению, примерно так:

<div class = "card-action">
  <a href = "{% url 'select_item_view' item_id=myitem.id %}">Selecionar</a>
</div>

Затем Django убедится, что href указывает на URL-адрес, который ссылается на представление select_item с правильным параметром.

Очень полезный ответ, спасибо. Если вы можете помочь, у меня есть еще одно сомнение. Должен ли я создать view_select.py или поместить все в тот же файл view.py? Я думаю, что view.py очень подробный

Ronaldo Lanhellas 09.09.2018 16:46

Обычно все представления помещаются в views.py, но вы действительно можете записывать разные файлы. Однако создание каждого представления в отдельном файле было бы более "Java-ish" подходом.

Willem Van Onsem 09.09.2018 16:47

Еще раз спасибо Виллем

Ronaldo Lanhellas 09.09.2018 16:51

Другие вопросы по теме