Python 当JInja模板有多个块时,如何构建请求处理程序?
我想制作一个运行在GAE框架/服务上的简单网站。它非常小,我并不需要整个强大的Django框架,因此我选择了google制造的Webapp2框架,再加上Jinja2模板语言 我来自一个非常简单的面向PHP和HTML的背景,所以我很难适应一个真正的框架的工作方式。我目前最大的疑问来自模板系统和请求处理程序是如何协同工作的,特别是当页面的模板有几个“动态”元素时 我将首先解释我在PHP中所做的工作,这样您就可以更好地理解我想要实现的目标 假设我想要一个包含以下内容的网站:Python 当JInja模板有多个块时,如何构建请求处理程序?,python,google-app-engine,jinja2,webapp2,Python,Google App Engine,Jinja2,Webapp2,我想制作一个运行在GAE框架/服务上的简单网站。它非常小,我并不需要整个强大的Django框架,因此我选择了google制造的Webapp2框架,再加上Jinja2模板语言 我来自一个非常简单的面向PHP和HTML的背景,所以我很难适应一个真正的框架的工作方式。我目前最大的疑问来自模板系统和请求处理程序是如何协同工作的,特别是当页面的模板有几个“动态”元素时 我将首先解释我在PHP中所做的工作,这样您就可以更好地理解我想要实现的目标 假设我想要一个包含以下内容的网站: 页面标题取决于所访问的页
- 页面标题取决于所访问的页面,例如:“Mysite.com | Control Panel”
- 动态菜单栏,可根据用户的配置文件或登录状态进行更改
- 显然,页面主体完全依赖于正在查看的页面
index.PHP
:
<?php
/*here use the $_GET or $_POST variable, and the $_SESSION variable
to figure out who's connected, which page is being displayed,
and store those values in global variables, for the
included modules to use */
include('page_header.php'); // renders the whole <head> </head> tag and its content
echo "<body>";
include('views/menu.php'); //generates the menu, displays it
switch($page_name){
case "home":
include('home.php'); //renders the page body for the homepage
break;
case "articles":
include('home.php'); //renders the page body for the blog articles listing
break;
case "guestbook":
include('home.php'); //renders the page body for the guestbook
break;
}
echo "</body>";
我不明白的是,如何构建不同的处理程序,从而生成Jinja用于渲染块的上下文,并避免冗余。
**另外,我可以使用几个不同的模板文件,单独扩展一个块(例如:menu.html、header.html、body_home.html、body_articles.html等)**
您可以使用作为回答的基础
感谢您提供的帮助,抱歉出现语法错误,英语不是我的母语。jinja2中有一个名为的功能,它几乎是一个参数化的include 因此,如果include应该参数化,您将执行以下操作:
{% macro menu(params) -%}
do something
{%- endmacro %}
并在模板中调用宏:
<div> menu('bar') </dib>
菜单('bar')
如果不需要提供参数,只需在父模板中将其保留为静态html即可
对于可以遵循hello world示例的处理程序,只需使用链接引导您加载jinja的环境
我知道您想要翻译php
示例,但是请尝试在处理程序中尽可能多地执行逻辑,而不是模板
对于第二个问题,是的,如果您需要,您可以只扩展一个块,如果您需要父级内容,则有一个
{{super()}
块来获取它们。我没有用php编程,但是您是否要求包含一些常见的(有些静态的)代码title
和menu
中的内容,或者它们是否独立于每个处理程序?title.php
,menu.php
可能使用了执行前定义的一些全局变量,是的。为什么会出现这个问题?你要求构建生成上下文的不同处理程序,这让人感到困惑,但你提供的链接实际上就是这样做的,这是一个jinja2
问题或webapp2
问题。两者兼而有之,我只是想知道将这个基本PHP ArchiveTexture转换为webapp2+jinja2So的最佳实践,我是否应该创建一个基本处理程序,负责呈现所有页面(菜单栏、页脚、标题栏)共有的动态元素,然后使所有特定于页面的处理程序从该处理程序继承?我了解jinja和webapp的基本用法,我只知道如何防止冗余并保持模块化。如果您知道任何适合我需要的示例,请与我分享:P,如果您仍然有疑问,请对其进行评论,但除了模板部分中的模板继承和宏之外,这是非常重要的,并且对不同的页面使用不同的处理程序。要评论,我应该提交吗?(我以前从未使用过gits)我不这么认为,只有一个github帐户
<div> menu('bar') </dib>