Несколько строк из скрипта app.py я не понимаю - PullRequest
1 голос
/ 29 февраля 2012

Итак, я понимаю, что python назначает переменную render для web.template.render, но я не совсем понимаю, что он делает на английском языке. Мой каталог шаблонов "вызывается" (это правильное слово?), И layout.html используется некоторым образом. Я пытался взломать код, и он все еще работает без этой строки, хотя. Я получил указание использовать это и не понимаю.

render = web.template.render('templates/', base="layout")

Следующий класс имеет для меня смысл в этом смысле: объект, назначенный ему, вернет hello_form.html, и благодаря второй функции (метод?) Он позволит пользователю вводить вещи в приглашение и возвращать эти значения. Я не очень хорошо понимаю, что делают переменная строка form или строка return. Любая помощь или быстрые переводы мне очень помогут, спасибо!

class Index(object):
    def GET(self):
        return render.hello_form()

    def POST(self):
        form = web.input(name = "what", greet = "no response?")
        greeting = "%s, %s" % (form.greet, form.name)
        return render.index(greeting = greeting)

1 Ответ

1 голос
/ 29 февраля 2012

Поправьте меня, если я ошибаюсь, но ваше замешательство - это синтаксис типа name = "what"?Это просто говорит о том, что функция, в данном случае web.input, принимает параметр с именем name, а вы присваиваете его непосредственно "what".То же самое с render.index(greeting = greeting), он принимает параметр greeting, которому вы присваиваете значение локальной переменной greeting, которая была оценена в строке над оператором return.

Так что, не глядя наметод, я бы сказал, нет гарантии, что return render.index(greeting) совпадает с render.index(greeting = greeting).Возьмем, к примеру, этот фрагмент кода, взятый из здесь , но без бесконечного цикла, который я только что заметил:

# Default Values
def multiprint(n=5, txt=""):
    i = 0
    while i < n:
        print txt
        i++

Затем можно вызвать эту функцию следующим образом:

>>> multiprint()






>>> multiprint(1)


>>> multiprint(1,"hi")
hi

>>> multiprint(txt="hi")
hi
hi
hi
hi
hi

Где в последней строке мы не указали n, первый параметр, но указали txt.Я также согласен с вами, что greeting = greeting сбивает с толку.Это похоже на милый маленький трюк, но мне все равно.Имя параметра greeting, как в нашем примере txt, а локальная переменная greeting.Лично я бы назвал локальную переменную как-нибудь еще, а затем получил бы render.index(greeting = myGreetingText) или что-то в этом роде.

...