0

我正在使用 Cookiecutter Pyramid Web 开发框架。这有三个链接文件:

utils.py - 定义要添加到 url 的随机缓存字符串

views.py - 将 utils 函数传递给 chameleon 模板

layout.pt - 调用静态 css url 等的变色龙模板。

在 layout.pt pre-cache-busting 中有一个链接说:

<link href="${request.static_url('pycharm_app:static/theme.css')}" rel="stylesheet">

我正在尝试编辑此链接以调用 build_cache_id 函数:

 <link href="/static/theme.css?cacheId=${build_cache_id('/static/theme.css')}" rel="stylesheet">

但得到错误:

NameError: build_cache_id

 - Expression: "build_cache_id('/static/theme.css')"
 - Filename:   ... s/first_business_website/pycharm_app/templates/layout.pt
 - Location:   (line 17: col 43)
 - Source:     ... ss?cacheId=${build_cache_id('/static/theme.css')}" rel="styl ...
                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 - Expression: "load: layout.pt"
 - Filename:   ... rst_business_website/pycharm_app/templates/mytemplate.pt
 - Location:   (line 1: col 22)
 - Source:     <div metal:use-macro="load: layout.pt">
                                     ^^^^^^^^^^^^^^^
 - Arguments:  view: <function my_view at 0x109eff8b0>
               renderer_name: ../templates/mytemplate.pt
               renderer_info: <RendererHelper - at 0x109f3f040>
               context: <DefaultRootFactory None at 0x109d3faf0>
               request: <Request - at 0x109d3fa90>
               req: <Request - at 0x109d3fa90>
               get_csrf_token: <partial - at 0x109f32db0>
               project: pycharm_app
               target_language: <NoneType - at 0x10817de60>
               repeat: {...} (0)
               macroname: load: layout.pt
4

2 回答 2

0

修复了这个!在@sinoroc 的大力帮助下。

问题是使用 PyCharm 启动金字塔 Web 项目以与通过终端 cookiecutter 不同的方式设置文件和文件夹结构。在不确保修复管道的情况下,不可能立即将“丢失”文件从 cookiecutter 框架复制到 PyCharm 框架。- 输入proutes development.ini终端将列出路线。在我的例子中,pyramid_debugtoolbar有没有 url 的路由。删除解决pyramid_debugtoolbardevelopment.ini这个问题。- 所有路线都需要在__init__.py文件中指定。将新模板文件复制粘贴到文件夹结构中并不意味着它们会自动出现在这里。- 所有路由都需要传递给@view_config in views.py. 例如

@view_config(route_name='index',renderer='templates/index.pt')
def index(_):
return extend_model({'project':'designable_web'})

同样,当从另一个文件夹结构中粘贴新文件名时,这些路由不会自动设置。

  • 检查 setup.py 中安装了哪种模板语言(例如 chameleon、jinja2)。目前 PyCharm 有一个错误,即使您在设置时选择了 CHAMELEON,也默认为 jinja2。除非在此处指定正确的相应语言,否则模板文件将不起作用。

  • 检查文件夹深度。cookiecutter 框架有一个单独的views 文件夹,里面有views 文件,而PyCharm 有views.py 文件,位于顶部的“app level”文件夹下面。再次proutes development.ini将指定哪个是正确的。

于 2019-11-16T17:35:12.903 回答
0

错误输出的Arguments部分清楚地表明build_cache_id没有传递给模板引擎。另一方面,project变量是。

 - Arguments:  view: <function my_view at 0x109eff8b0>
               renderer_name: ../templates/mytemplate.pt
               renderer_info: <RendererHelper - at 0x109f3f040>
               context: <DefaultRootFactory None at 0x109d3faf0>
               request: <Request - at 0x109d3fa90>
               req: <Request - at 0x109d3fa90>
               get_csrf_token: <partial - at 0x109f32db0>
               project: pycharm_app
               target_language: <NoneType - at 0x10817de60>
               repeat: {...} (0)
               macroname: load: layout.pt```

看起来该extend_model函数未正确调用,即使代码对我来说看起来正确。应用程序是否正确重新加载?也许print在这些函数中添加简单的调用作为快速而肮脏的调试,并确保正确的代码正在运行。

于 2019-11-13T11:26:11.683 回答