Как использовать переключатели в python web.py

Я использую структуру web.py для создания простого веб-приложения.

Я хочу создать переключатель, поэтому я написал следующий код

from web import form
from web.contrib.auth import DBAuth
import MySQLdb as mdb



render = web.template.render('templates/')

urls = (
  '/project_details',  'Project_Details',  
)

class Project_Details:

    project_details = form.Form( 
        form.Radio('Home Page'),
        form.Radio('Content'),
        form.Radio('Contact Us'),
        form.Radio('Sitemap'),
        )

    def GET(self):
        project_details = self.project_details()
        return render.projectdetails(project_details)  

Когда я запускаю код с URL-адресом localhost:8080, я вижу следующую ошибку

Traceback (most recent call last):
  File "/usr/lib/python2.7/site-packages/web/application.py", line 237, in process
    return p(lambda: process(processors))
  File "/usr/lib/python2.7/site-packages/web/application.py", line 565, in processor
    h()
  File "/usr/lib/python2.7/site-packages/web/application.py", line 661, in __call__
    self.check(mod)
  File "/usr/lib/python2.7/site-packages/web/application.py", line 680, in check
    reload(mod)
  File "/home/local/user/python_webcode/index.py", line 68, in <module>
    class Project_Details:
  File "/home/local/user/python_webcode/index.py", line 72, in Project_Details
    form.Radio('password'),
TypeError: __init__() takes at least 3 arguments (2 given)

Какой параметр нужно передать в переключатель, чтобы избежать этой ошибки


person Shiva Krishna Bavandla    schedule 10.10.2012    source источник


Ответы (2)


Глядя на исходник, похоже, что вам нужно используйте один конструктор Radio для всех ваших элементов, так как один и тот же объект Radio фактически сгенерирует несколько элементов <input>.

Попробуйте что-то вроде::

project_details = form.Form( 
    form.Radio('details', ['Home Page', 'Content', 'Contact Us', 'Sitemap']),
    )
person Ben    schedule 10.10.2012

Вот что мне удалось расшифровать. checked='checked', похоже, выбирает случайный (последний?) элемент в списке. Без выбора по умолчанию мое тестирование возвращалось с NoneType, если ни один из переключателей не был выбран.

project_details = form.Form(
  form.Radio('selections', ['Home Page', 'Content', 'Contact Us','Sitemap'], checked='checked'),
  form.Button("Submit") 
)

Чтобы получить доступ к выбору пользователя в виде строки...

result = project_details['selections'].value

Если вы хотите использовать javascript, когда ваш шаблон активен, вы можете добавить onchange='myFunction()' в конец строки Radio. Я также присваиваю идентификатор каждому элементу, чтобы избежать разочарования вызовами getElementById, поэтому мое объявление выглядит так.

 project_details = form.Form(
   form.Radio('selections', ['Home Page', 'Content', 'Contact Us','Sitemap'], checked='checked', onchange='myFunction()', id='selections'),
   form.Button("Submit") 
)
person Steve Kritzer    schedule 18.02.2019