首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >指向静态文件的jinja2链接

指向静态文件的jinja2链接
EN

Stack Overflow用户
提问于 2017-02-06 17:57:40
回答 1查看 13K关注 0票数 6

我正在尝试理解如何在jinja2中创建指向静态文件的链接。

我查找的所有内容都与Flask有关,而我在这个阶段只使用webapp2。

我的main.py文件如下所示:

代码语言:javascript
复制
import os
import urllib

from google.appengine.api import users
from google.appengine.ext import ndb

import jinja2
import webapp2

JINJA_ENVIRONMENT = jinja2.Environment(
    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
    extensions=['jinja2.ext.autoescape'],
    autoescape=True)

class MainPage(webapp2.RequestHandler):
    def get(self): 
    template = JINJA_ENVIRONMENT.get_template('/templates/base.html')  
    self.response.out.write(template.render())

class ConsultsPage(webapp2.RequestHandler):
    def get(self):
    template = JINJA_ENVIRONMENT.get_template('/templates/consults.html')  
    self.response.out.write(template.render())

class CreateConsultPage(webapp2.RequestHandler):
    def get(self):
    template = JINJA_ENVIRONMENT.get_template('/templates/create-consult.html')  
    self.response.out.write(template.render())

app = webapp2.WSGIApplication([
    ('/', MainPage),
    ('/consults', ConsultsPage),
    ('/schedule/create-consult', CreateConsultPage)
], debug=True)

我的base.html模板包含指向"/css“、"/js”、"/images“等静态文件的链接。

当我查看localhost:8080/和localhost:8080/consults时,所有的静态文件都在工作。佩奇看起来很好。

但是,localhost:8080/consults/create-consult结构中的下一级并没有链接到静态文件。

当我查看源代码时,我看到css链接已经呈现为localhost:8080/consults/css/style.css,而实际位置是localhost:8080/css/style.css。

我知道我可能需要通过某个名为uri_for的环境变量使所有链接都是动态的,但我找不到正确的方法来实现这一点。

我尝试将我的css链接替换为

代码语言:javascript
复制
href="{{ uri_for('static', filename='css/screen.css') }}"

App Engine uri_for告诉我没有设置。

基本上我想知道设置uri_for的正确过程,然后如何将其合并到我的链接到静态文件的路径。

感谢您的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-06 18:57:03

uri_for()是一个特定于Flask的函数;它将名称static与路由相匹配,然后可以使用该路由生成路径(如果static路由配置为处理/static/<path:filename> urls,则类似于/static/css/screen.css )。

你只需要将路径硬编码为/css/screen.css,不需要函数。

请注意前导的/;,这使它成为相对于当前主机的绝对路径。对于http://localhost:8080/foo/bar上的页面,这样的路径会加上前缀http://localhost:8080以形成http://localhost:8080/css/screen.css。当您部署到应用程序引擎时,主机名将不同。

您可以将前缀URL或路径存储在全局中,以便以后可以轻松地将路径替换为CDN:

代码语言:javascript
复制
JINJA_ENVIRONMENT.globals['STATIC_PREFIX'] = '/'

并在您的模板中使用它:

代码语言:javascript
复制
<style src="{{ STATIC_PREFIX }}css/screen.css"></style>

现在,您可以通过将STATIC_PREFIX设置为不同的值(包括http://somecdn.cdnprovider.tld/prefix/ ),在一个位置更改所有此类URL。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42064874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档