- Python Pyramid - Discussion
- Python Pyramid - Useful Resources
- Python Pyramid - Quick Guide
- Python Pyramid - Deployment
- Python Pyramid - Security
- Python Pyramid - Logging
- Python Pyramid - Testing
- Command Line Pyramid
- Creating A Project Manually
- Python Pyramid - Package Structure
- Python Pyramid - Project Structure
- Python Pyramid - Creating A Project
- Python Pyramid - Cookiecutter
- Pyramid - Using SQLAlchemy
- Python Pyramid - Message Flashing
- Python Pyramid - Events
- Python Pyramid - Sessions
- Python Pyramid - Response Object
- Python Pyramid - Request Object
- Python Pyramid - Static Assets
- Pyramid - HTML Form Template
- Python Pyramid - Templates
- Python Pyramid - Route Prefix
- Python Pyramid - View Configuration
- Python Pyramid - Url Routing
- Pyramid - Application Configuration
- Python Pyramid - Hello World
- Pyramid - Environment Setup
- Python Pyramid - Overview
- Python Pyramid - Home
Selected Reading
- Who is Who
- Computer Glossary
- HR Interview Questions
- Effective Resume Writing
- Questions and Answers
- UPSC IAS Exams Notes
Python Pyramid - HTML Form Template
In this chapter, we shall see how Pyramid reads the data from HTML form. Let us save the following HTML script as myform.html. We shall use it for obtaining Template object and render it.
<html> <body> <form method="POST" action="http://localhost:6543/students"> <p>Student Id: <input type="text" name="id"/> </p> <p>student Name: <input type="text" name="name"/> </p> <p>Percentage: <input type="text" name="percent"/> </p> <p><input type="submit" value="Submit"> </p> </body> </html>
An "index" route added in Pyramid object s configuration is mapped to the following index() function, which renders the above HTML form −
@view_config(route_name= index , renderer= templates/myform.html ) def index(request): return {}
As we can see, the data entered by user is passed to /students URL by POST request. So, we shall add a students route to match the /students pattern, and associate it with add() view function as follows −
@view_config(route_name= students , renderer= templates/markpst.html ) def add(request): student={ id :request.params[ id ], name :request.params[ name ], percent :int(request.params[ percent ])} 9. Pyramid – HTML Form Template students.append(student) return { students :students}
The data sent by POST request is available in the HTTP request object in the form of request.params object. It is a dictionary of HTML form attributes and their values as entered by the user. This data is parsed and appended to students pst of dictionary objects. The updated students object is passed to the markpst.html template as a context data.
The markpst.html web template as the same as used in the previous example. It displays a table of student data along with the computed result column.
<html> <body> <table border=1> <thead> <tr> <th>Student ID</th> <th>Student Name</th> <th>percentage</th> <th>Result</th> </tr> </thead> <tbody> {% for Student in students %} <tr> <td>{{ Student.id }}</td> <td>{{ Student.name }}</td> <td>{{ Student.percent }}</td> <td> {% if Student.percent>=50 %} Pass {% else %} Fail {% endif %} </td> </tr> {% endfor %} </tbody> </table> </body> </html>
Example
The complete code containing views for rendering the HTML form, parsing the form data and generating a page showing the students markpst table is given below −
from wsgiref.simple_server import make_server from pyramid.config import Configurator from pyramid.response import Response from pyramid.view import view_config students = [ {"id": 1, "name": "Ravi", "percent": 75}, {"id": 2, "name": "Mona", "percent": 80}, {"id": 3, "name": "Mathews", "percent": 45}, ] @view_config(route_name= index , renderer= templates/myform.html ) def index(request): return {} @view_config(route_name= students , renderer= templates/markpst.html ) def add(request): student={ id :request.params[ id ], name :request.params[ name ], percent :int(request.params[ percent ])} students.append(student) return { students :students} if __name__ == __main__ : with Configurator() as config: config.include( pyramid_jinja2 ) config.add_jinja2_renderer(".html") config.add_route( index , / ) config.add_route( students , /students ) config.scan() app = config.make_wsgi_app() server = make_server( 0.0.0.0 , 6543, app) server.serve_forever()
Output
To start the server, run the above Python code from command pne. In your browser, visit http://localhost:6543/ to get the form as shown below −
Enter a sample data as shown and press submit button. The browser is directed to /students URL, which in turn invokes the add() view. The result is a table of markpst showing the newly entered data of a new student.
Advertisements