Django - Функция класса не возвращает страницу - PullRequest
0 голосов
/ 20 июня 2020

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

Ниже представлена ​​сама функция.

def SparkCalc(request):
    new_item = sparkCalculator()
    new_item.tix = request.POST['tix']
    new_item.tenrolls = request.POST['tenrolls']
    new_item.crystals = request.POST['crystals']
    new_item.save()
    total = new_item.getTotal()
    return render(request, 'SparkResults.html', {"title": "Spark Results"}, {"total": total})

, а ниже - страница Django, с которой я вызываю ее:

<form action="/SparkCalc/" method="POST">{% csrf_token %}
    <label for ="tix">Please enter your single roll tickets</label>
    <input type="text" id="tix" name="tix"/>
    <label for ="tenrolls">Please enter your ten-roll tickets</label>
    <input type="text" id="tenrolls" name="tenrolls"/>
    <label for ="tix">Please enter your total crystal amount</label>
    <input type="text" id="crystals"name="crystals"/>
    <input type="submit" value="Get Results"/>    
</form>

И, наконец, ниже - класс, который я создал:

class sparkCalculator(models.Model): 
    tix = models.PositiveIntegerField()
    tenrolls = models.PositiveIntegerField()
    crystals = models.PositiveIntegerField()

    def getTotal(self): 
        return (int(self.tix)*300) + (int(self.tenrolls)* 3000) + int(self.crystals)

Я предполагаю, что код будет работать так: как только пользователь вводит свою информацию в форму, Django затем запускает функцию SparcCal c, собирая введенную информацию, выполняя математические вычисления и собирая итог, а затем отправляя результат на новую страницу. Вместо этого кажется, что страница просто обновляется.

Также возможно ли запустить этот стиль кода, не создавая для него целый класс? Это не та информация, которую я хотел бы хранить. В идеале я бы просто хотел, чтобы он выполнялся во время выполнения и покончил с ним, но предыдущие попытки сделать это не увенчались успехом, и я просто сдался и попытался создать класс.

Насколько я могу судить, это правильно введены в мои шаблоны URL.

from catalog.views import (
    SparkCalc,
    sparkCalcPage,
)

urlpatterns = [
    path('SparkCalc/', sparkCalcPage),
    path('SparkResults/', SparkCalc),
]

Любая помощь будет принята с благодарностью и заранее благодарим вас за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 21 июня 2020

Вместо создания модели для задачи выполните операцию в самом views.py.

def SparkCalc(request):
    tix = request.POST['tix']
    tenrolls = request.POST['tenrolls']
    crystals = request.POST['crystals']
    total = (int(tix)*300) + (int(tenrolls)* 3000) + int(crystals)
    return render(request, 'SparkResults.html', {"title": "Spark Results"}, {"total": total})
0 голосов
/ 21 июня 2020

Сигнатура функции render выглядит следующим образом:

def render(request, template_name, context=None, content_type=None, ...):
   ...

В вашем случае вы передали {'total':total} в аргумент ключевого слова content_type вместо context.

# also make sure 'SparkResults.html' can be found by the template loader 
render(request, 'SparkResults.html', {"title": "Spark Results", "total": total})

Также вам необходимо отправить свои данные в коррент-просмотр.

<form action="/SparkResults/" method="POST">
  {% csrf_token %}
    ...   
</form>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...