2016-01-04 1 views
1

Я пытаюсь вызвать функцию внутри класса, который у меня есть, когда пользователь нажимает кнопку. Это мое мнение:Шаблон Django, вызывающий функцию внутри класса при нажатии кнопки

def index(request): 
#return HttpResponse ('Hello world!') 
return render(request, "Articol/index.html", {'WallStreet': WallStreet.objects.all(), 'Add': CreateWallStreetArticle()}) 

Так на шаблоне это код для кнопки:

<button id="about-btn"> Click to add new articles to the database</button> 

<script> 
     $(document).ready(function() { 

      $("#about-btn").click(function(event) { 
       {{ Add.AddArticle() }}; 
      }); 
     }); 
</script> 

Так как вы можете видеть, функция находится внутри класса CreateWallStreetArticle() С кодом что у меня есть, ничего не происходит, когда я нажимаю кнопку, и я не могу понять способ вызова функции AddArticle()

Если на вид я изменяю рендер рендеринга на это:

return render(request, "Articol/index.html", {'WallStreet': WallStreet.objects.all(), **'Add': CreateWallStreetArticle().AddArticle()**}) 

Это вызывает функцию, но не на кнопку мыши, он вызывает его автоматически, когда я перезагрузить страницу, и я не хочу, чтобы :-)

спасибо!

+0

Действительно ли это должно быть сделано таким образом? У вас есть сердце о 'ajax'? – pythad

+0

Я слышал об этом, но я этого не знаю. Не могли бы вы подробнее рассказать? Как использовать ajax для вызова функции с Django? – Andrei

ответ

0

Я думаю, что правильный способ сделать это - использовать Ajax. Ajax означает асинхронный Javascript, и это именно то, что нам нужно. Что вам нужно сделать, так это привязать функцию js к вашей кнопке, которая отправит запрос ajax на указанный вами URL-адрес, URL-адрес будет отображаться через ваш urls.py и вызовет требуемое представление. В представлении вы можете запустить любой код python, который вы хотите, и вернуть ответ json с данными, которые вы хотите.

Я предлагаю вам прочитать Tango with Django ajax tutorial, он предоставляет базовый пример использования ajax с помощью примера django usign, например, кнопки. Если у вас есть вопросы, не стесняйтесь спрашивать их.

0

Предполагая, что есть некоторые JS код, который находится внутри index зрения, есть две вещи, которые вы должны были бы сделать:

1) Вы неправильно вызова функции Добавитьстатью - это должно быть просто {{ Add }} (который будет getCreateWallStreetArticle(), так как он находится внутри словаря)

2) Вам нужно будет пометить код, как безопасный для Django не избежать JS: вы можете сделать это путем {{ Add }} в {% autoescape off %}{{ Add }}{% endautoescape %}.

Примечание: этот метод не рекомендуется по нескольким причинам. Одна из причин - безопасность, а другая - разделение логики. Скорее всего, было бы лучше просто включить то, что {{ Add }} находится прямо в шаблоне, предполагая, что это возможно, конечно.

+0

Well Add относится к CreateWallStreetArticle(). И это класс, который содержит AddArticle(), который я хочу использовать. Я не думаю, что это возможно, как ты это сказал. – Andrei

+0

Является ли 'CreateWallStreetArticle()' предполагаемой функцией JS или функцией Python? – Hybrid

+0

CreateWallStreetArticle() - класс python. Посмотрите здесь, чтобы увидеть весь класс и функцию AddArticle(), которую я хочу вызвать нажатием кнопки: http://pastie.org/10669470 – Andrei

Смежные вопросы