Cheetah

xiaoxiao2021-03-06  40

Cheetah is a Python-powered template engine and code generator. It can be used as a standalone utility or it can be combined with other tools. Cheetah has many potential uses, but web developers looking for a viable alternative to ASP, JSP, PHP and PSP Are Expected to Be Its Princi User Group. Cheetah:

generates HTML, SGML, XML, SQL, Postscript, form email, LaTeX, or any other text-based format. cleanly separates content, graphic design, and program code. This leads to highly modular, flexible, and reusable site architectures, shorter development time, and HTML and program code that is easier to understand and maintain. It is particularly well suited for team efforts. blends the power and flexibility of Python with a simple template language that non-programmers can understand. gives template writers full access to any Python data structure, module, function, object, or method in their templates. makes code reuse easy by providing an object-orientated interface to templates that is accessible from Python code or other Cheetah templates. One template can subclass another and selectively reimplement sections of It. Province a Simple, Yet Powerful, Caching Mechanism That Can Dramatical Improve The Performance of a Dynamic Website. Compiles Templates Into Optimized, Yet Readable, Python code Cheetah integrates tightly with Webware for Python (http://www.webwareforpython.org/):.. A Python-powered application server and persistent servlet framework Webware provides automatic session, cookie, and user management and can be used with almost Any Operating-System, Web Server, OR Database. Through Python, IT Works with XML, SOAP, XML-RPC, CORBA, COM, DCOM, LDAP, IMAP, POP3, FTP, SSL, etc .. Python Supports Structured Exception Handling, Threading, Object Serialization, Unicode, String Internationalization, Advanced Cryptography, And More. It Can Also Be Extended with code and libraries Written In C, C

, Java and other languages. Like Python, Cheetah and Webware are Open Source Software and are supported by active user communities. Together, they are a powerful and elegant framework for building dynamic web sites. Like its namesake, Cheetah is fast, flexible and powerful Give me an esample! Here's a very Simple Example That Illustrates Some of Cheetah's Basic Syntax:

$ title </ title> </ head></p> <p><body></p> <p><table></p> <p>#for $ Client in $ Clients</p> <p><tr></p> <p><TD> $ client.surname, $ client.firstname </ td></p> <p><TD> <a href="mailto: $ c $ent ee"> $ client.email </a> </ td></p> <p></ TR></p> <p>#end for</p> <p></ TABLE></p> <p></ body></p> <p></ html></p> <p>Compare this with psp:</p> <p><html></p> <p><head> <title> <% = title%> </ title> </ head></p> <p><body></p> <p><table></p> <p><% for client in clients:%></p> <p><tr></p> <p><TD> <% = client ['Surname']%>, <% = client '[firstname']%> ​​</ td></p> <p><TD> <a href="mailto: %= =client['Email']ism "></p> <p><% = client ['email']%> </a> </ td></p> <p></ TR></p> <p><% end%></p> <p></ TABLE></p> <p></ body></p> <p></ html></p> <p>What is the philosophy behind cheetah? Cheetah's design WAS Guided by these Principles:</p> <p>Python for the back end, Cheetah for the front end. Cheetah was designed to complement Python, not replace it. Cheetah's core syntax should be easy for non-programmers to learn. Cheetah should make code reuse easy by providing an object-oriented interface to templates that is accessible from Python code or other Cheetah templates. Python objects, functions, and other data structures should be fully accessible in Cheetah. Cheetah should provide flow control and error handling. Logic that belongs in the front end should not be relegated to the back end simply because it's complex. It should be easy to separate content, graphic design, and program code, but also easy to integrate them. A clean separation makes it easier for a team of content writers, HTML / graphic designers, and programmers To Work Together WITHOUT STEPPING EACH Other'S and Polluting EACH Other's Work. The HTML Framework and The Content IT Contains Are Two Separate Things, And Analytical Calculations (Program C ode) is a third thing. Each team member should be able to concentrate on their specialty and to implement their changes without having to go through one of the others (ie, the dreaded `` webmaster bottleneck ''). While it should be easy To Develop Content, Graphics and Program Code Separately, IT Should Be Easy To Integrate Them Together Into A Website. in Particular, IT Should Be Easy:</p></div><div class="text-center mt-3 text-grey"> 转载请注明原文地址:https://www.9cbs.com/read-53756.html</div><div class="plugin d-flex justify-content-center mt-3"></div><hr><div class="row"><div class="col-lg-12 text-muted mt-2"><i class="icon-tags mr-2"></i><span class="badge border border-secondary mr-2"><h2 class="h6 mb-0 small"><a class="text-secondary" href="tag-2.html">9cbs</a></h2></span></div></div></div></div><div class="card card-postlist border-white shadow"><div class="card-body"><div class="card-title"><div class="d-flex justify-content-between"><div><b>New Post</b>(<span class="posts">0</span>) </div><div></div></div></div><ul class="postlist list-unstyled"> </ul></div></div><div class="d-none threadlist"><input type="checkbox" name="modtid" value="53756" checked /></div></div></div></div></div><footer class="text-muted small bg-dark py-4 mt-3" id="footer"><div class="container"><div class="row"><div class="col">CopyRight © 2020 All Rights Reserved </div><div class="col text-right">Processed: <b>0.039</b>, SQL: <b>9</b></div></div></div></footer><script src="./lang/en-us/lang.js?2.2.0"></script><script src="view/js/jquery.min.js?2.2.0"></script><script src="view/js/popper.min.js?2.2.0"></script><script src="view/js/bootstrap.min.js?2.2.0"></script><script src="view/js/xiuno.js?2.2.0"></script><script src="view/js/bootstrap-plugin.js?2.2.0"></script><script src="view/js/async.min.js?2.2.0"></script><script src="view/js/form.js?2.2.0"></script><script> var debug = DEBUG = 0; var url_rewrite_on = 1; var url_path = './'; var forumarr = {"1":"Tech"}; var fid = 1; var uid = 0; var gid = 0; xn.options.water_image_url = 'view/img/water-small.png'; </script><script src="view/js/wellcms.js?2.2.0"></script><a class="scroll-to-top rounded" href="javascript:void(0);"><i class="icon-angle-up"></i></a><a class="scroll-to-bottom rounded" href="javascript:void(0);" style="display: inline;"><i class="icon-angle-down"></i></a></body></html><script> var forum_url = 'list-1.html'; var safe_token = 'HPjlS1RZgOzh8fVyC_2FzOfq5d0g_2FTDd2DeYOH4SQ0TSfi9e89MatG2edqaFkKlziVS8adAktxDmMMObURdn4KIw_3D_3D'; var body = $('body'); body.on('submit', '#form', function() { var jthis = $(this); var jsubmit = jthis.find('#submit'); jthis.reset(); jsubmit.button('loading'); var postdata = jthis.serializeObject(); $.xpost(jthis.attr('action'), postdata, function(code, message) { if(code == 0) { location.reload(); } else { $.alert(message); jsubmit.button('reset'); } }); return false; }); function resize_image() { var jmessagelist = $('div.message'); var first_width = jmessagelist.width(); jmessagelist.each(function() { var jdiv = $(this); var maxwidth = jdiv.attr('isfirst') ? first_width : jdiv.width(); var jmessage_width = Math.min(jdiv.width(), maxwidth); jdiv.find('img, embed, iframe, video').each(function() { var jimg = $(this); var img_width = this.org_width; var img_height = this.org_height; if(!img_width) { var img_width = jimg.attr('width'); var img_height = jimg.attr('height'); this.org_width = img_width; this.org_height = img_height; } if(img_width > jmessage_width) { if(this.tagName == 'IMG') { jimg.width(jmessage_width); jimg.css('height', 'auto'); jimg.css('cursor', 'pointer'); jimg.on('click', function() { }); } else { jimg.width(jmessage_width); var height = (img_height / img_width) * jimg.width(); jimg.height(height); } } }); }); } function resize_table() { $('div.message').each(function() { var jdiv = $(this); jdiv.find('table').addClass('table').wrap('<div class="table-responsive"></div>'); }); } $(function() { resize_image(); resize_table(); $(window).on('resize', resize_image); }); var jmessage = $('#message'); jmessage.on('focus', function() {if(jmessage.t) { clearTimeout(jmessage.t); jmessage.t = null; } jmessage.css('height', '6rem'); }); jmessage.on('blur', function() {jmessage.t = setTimeout(function() { jmessage.css('height', '2.5rem');}, 1000); }); $('#nav li[data-active="fid-1"]').addClass('active'); </script>