Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当JInja模板有多个块时,如何构建请求处理程序?_Python_Google App Engine_Jinja2_Webapp2 - Fatal编程技术网

Python 当JInja模板有多个块时,如何构建请求处理程序?

Python 当JInja模板有多个块时,如何构建请求处理程序?,python,google-app-engine,jinja2,webapp2,Python,Google App Engine,Jinja2,Webapp2,我想制作一个运行在GAE框架/服务上的简单网站。它非常小,我并不需要整个强大的Django框架,因此我选择了google制造的Webapp2框架,再加上Jinja2模板语言 我来自一个非常简单的面向PHP和HTML的背景,所以我很难适应一个真正的框架的工作方式。我目前最大的疑问来自模板系统和请求处理程序是如何协同工作的,特别是当页面的模板有几个“动态”元素时 我将首先解释我在PHP中所做的工作,这样您就可以更好地理解我想要实现的目标 假设我想要一个包含以下内容的网站: 页面标题取决于所访问的页

我想制作一个运行在GAE框架/服务上的简单网站。它非常小,我并不需要整个强大的Django框架,因此我选择了google制造的Webapp2框架,再加上Jinja2模板语言

我来自一个非常简单的面向PHP和HTML的背景,所以我很难适应一个真正的框架的工作方式。我目前最大的疑问来自模板系统和请求处理程序是如何协同工作的,特别是当页面的模板有几个“动态”元素时

我将首先解释我在PHP中所做的工作,这样您就可以更好地理解我想要实现的目标

假设我想要一个包含以下内容的网站:

  • 页面标题取决于所访问的页面,例如:“Mysite.com | Control Panel”
  • 动态菜单栏,可根据用户的配置文件或登录状态进行更改
  • 显然,页面主体完全依赖于正在查看的页面
因此,我在PHP中使用的方法在这里被压缩为一个简单的示例,
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>