我希望能够在服务器端轻松创建由变色龙和金字塔支持的ajax'小部件'.
Pyramid是否提供任何管道代码,使编写小部件变得容易?
我目前的方法是我有一个使用home.pt作为渲染器的主视图.home.pt使用宏base.pt定义页面结构,并为home.pt提供填充的插槽.base.pt还使用了我编写的登录"widget"宏(参见下面的account_login_widget.pt).
从理论上讲,这一切听起来都很棒......我有一个可以在许多页面中使用的可重用登录小部件,但我目前的方法效果不佳.我的登录窗口小部件在其渲染器中使用了像$ {username}这样的变量(服务器需要定义).我希望登录小部件及其渲染尽可能独立.但是根据我目前的做事方式,主视图代码需要了解登录窗口小部件的需求,并在字典中提供用户名,formrender和其他变量.绝对不好......
我觉得我接近正确的想法,但遗漏了一些东西......
有什么想法吗?
base.pt:
<html>
<head></head>
<body>
<div id="container">
<div id="header">
<span metal:use-macro="load: account_login_widget.pt"></span>
</div>
<div id="middle">
<span metal:define-slot="content"></span>
</div>
<div id="footer"></div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
home.pt:
<div metal:use-macro="load: base.pt">
<span metal:fill-slot="content">
<div>my stuff</div>
</span>
</div>
Run Code Online (Sandbox Code Playgroud)
account_login_widget.pt:
<span metal:define-macro="account_login_widget">
<script type="text/javascript">
(function($) {
$.fn.my_function = function() {
$('#login_form').submit(function(e) {
e.preventDefault();
// ajax call
$.post(some_url, some_data, function(response) {
$('#account_login_widget').html(response);
});
};
return this;
};
})(jQuery);
// Define the entry point
$(document).ready(function() {
$(document).my_function();
});
</script>
<div id="account_login_widget">
<div …Run Code Online (Sandbox Code Playgroud) 在Angular 1取得巨大成功后,我开始使用Angular 2.我遵循了Quickstart和Tour of Heroes教程,一切都像魅力一样.
Lite服务器开始启动,我看到tsc在监视模式下运行,我甚至看到BrowserSync被连接起来.大!
但是,我需要开始让事情变得更加现实.
而不是使用lite服务器,如何使用flask dev或gunicorn服务器将所有这些工作,将初始index.html文件作为呈现的jinja模板提供?
给烧瓶开发服务器一个非常有用的尝试,我基本上将示例index.html的内容从教程复制到我的jinja模板中,然后运行npm run tsc:w并最终启动我的烧瓶开发服务器并希望最好.事情编译得很好.但是在浏览器中我看到了问题:
angular2-polyfills.js:332 Error: SyntaxError: Unexpected token <
at ZoneDelegate.invoke (http://127.0.0.1:5000/static/node_modules/angular2/bundles/angular2-polyfills.js:332:29)
at Zone.run (http://127.0.0.1:5000/static/node_modules/angular2/bundles/angular2-polyfills.js:227:44)
at http://127.0.0.1:5000/static/node_modules/angular2/bundles/angular2-polyfills.js:576:58
Evaluating http://127.0.0.1:5000/app/main.js
Error loading http://127.0.0.1:5000/app/main.js`
Run Code Online (Sandbox Code Playgroud)
看着罪魁祸首transpile main.js文件,我看到:
(function(System, SystemJS, require) {<!doctype html>
<html>
<head lang='en'>
Run Code Online (Sandbox Code Playgroud)
所以,是的,这不会起作用......显然我的布线是乱七八糟的.
垫片,polyfill,反应扩展,systemjs,angular2本身有很多黑魔法,然后在tsc和lite服务器中抛出.不可否认,我还没有完成所有这些工作,这需要时间,但我希望能够让我的项目很快进入理智状态.
(我不介意在开发中使用lite服务器(BrowserSync是一个很好的特权),只要我可以配置它代理将返回渲染jinja模板的真正的烧瓶服务器.)
更新
这是实际的模板索引文件,我做了一些小的改动:
<!doctype html>
<html>
<head lang="en">
{% block head %}
<meta charset="utf-8">
<title>Angular 2 QuickStart</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="styles.css">
<!-- 1. Load libraries --> …Run Code Online (Sandbox Code Playgroud) 我在pyramid_formalchemy中创建自定义表单时遇到问题.我怀疑包中有一个错误,并想确认我没有遗漏任何东西.我的设置如下:
def includeme(config):
config.include('pyramid_formalchemy')
# Adding the jquery libraries
config.include('fa.jquery')
# Adding the package specific routes
config.include('myapp.web.formalchemy.faroutes')
config.formalchemy_admin('admin',
models=[User],
forms=faforms,
session_factory=session,
view='fa.jquery.pyramid.ModelView',
factory='myapp.model.RootFactory')
config.formalchemy_model('user',
model='myapp.model.user.User',
session_factory=session,
view='fa.jquery.pyramid.ModelView',
factory='myapp.model.RootFactory')
Run Code Online (Sandbox Code Playgroud)
faforms是一个包含我的自定义表单的模块:
from myapp.model.user import User
from formalchemy import FieldSet
from formalchemy import Grid
class UserFieldSet(FieldSet):
def __init__(self):
FieldSet.__init__(self, User)
self.configure()
class UserGrid(Grid):
def __init__(self):
Grid.__init__(self, User)
self.configure()
Run Code Online (Sandbox Code Playgroud)
如果我评论上面的两个类,formalchemy工作正常.我可以查看用户,我可以编辑它们.
当我把这两个课程放进去遇到问题时.问题是pyramid_formalchemy从模块的命名空间中获取UserGrid和UserFieldSet,然后尝试使用它们,就好像它们是实例化的类一样.这打破了事情.另一方面,如果pyramid_formalchemy没有找到将动态创建类的类并实例化它们.我相信有问题的代码在pyramid_formalchemy/views.py中,第236行从get_grid()函数开始:
def get_grid(self):
"""return a Grid object"""
request = self.request
model_name = request.model_name
form_name = '%sGrid' % model_name
if hasattr(request.forms, form_name):
g = getattr(request.forms, …Run Code Online (Sandbox Code Playgroud) 我正在使用sqlalchemy,也使用alembic进行迁移(和flask-sqlalchemy)。我有一个使用EARTH数据类型的postgres表。
CREATE TABLE things
(
id INTEGER PRIMARY KEY NOT NULL,
name TEXT,
earth_location EARTH
)
Run Code Online (Sandbox Code Playgroud)
这是我的sqlalchemy映射:
class Thing(db.Model):
__tablename__ = 'things'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.UnicodeText, nullable=False)
earth_location = db.Column(???)
Run Code Online (Sandbox Code Playgroud)
如何映射接地柱?
Alembic迁移能够应付吗?
谢谢!
python ×4
pyramid ×2
ajax ×1
angular ×1
chameleon ×1
flask ×1
formalchemy ×1
jinja2 ×1
node.js ×1
sqlalchemy ×1
template-tal ×1