在烧瓶中,如何提供不在静态文件夹中的图像?
我目前将用户上传的照片保存在flask文件夹之外的目录中(打开openshift,当前保存在数据文件夹下的图像,并且文件夹app-root/data文件位于其中app-root/repo/).
在我的模板中,我如何提供图像文件?
使用url_for,如何引用flask文件夹之外的这些图像文件?
- data/
|
-- uploads/
- repo/
|
-- app/
|
-- __init__.py
Run Code Online (Sandbox Code Playgroud)
正如您可以在flask app文件夹外看到数据文件夹.如何data/uploads从flask app目录生成存储在(一级以上)文件的链接是个问题?
我正在开发一个具有以下文件夹结构的烧瓶应用程序:
|-->flask_app.py
|-->static
|-->css
|-->bootstrap.min.css
|-->styles.css
|-->js
|-->jquery-3.1.1.min.js
|-->bootstrap.min.js
|-->script.js
|-->templates
|-->index.html
Run Code Online (Sandbox Code Playgroud)
链接到这些 css 和 js 文件的正确方法是index.html什么,我需要与它们关联的参数是什么?
我的 CSS 链接如下所示,位于标题中:
<link rel="stylesheet" href="{{ url_for('static', filename='css/styles.css') }}">
Run Code Online (Sandbox Code Playgroud)
我的 JS 链接如下所示,位于 body 标签的末尾:
<script src="{{ url_for('static', filename='js/script.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)
这是正确的语法吗?它们是否位于我模板中的正确位置(我确定这里有灵活性)?还有我应该传入的任何其他参数(例如 type="text/css", type="text/javascript", media="screen")?
一切都按预期工作,但如果有的话,我想遵循推荐的做法。
我尝试了多种不同的东西,但无法将URL显示为/ item,就像我想要的那样.我知道其他一切都正常运行,因为如果我只是用字符串替换{{item}},它就可以正常工作.我在这里错过了什么吗?
以下是问题所在的代码部分:
<div class="person_images_group">
{% for item in names %}
<div class="personlist">
<a href={{ url_for('name', name = {{item}} ) }}>
<img id={{ item }} src="" alt={{ item }} width="40" height="40">
</a>
</div>
<script>
document.getElementById("{{ item }}").src = getName("{{ item }}");
</script>
{% endfor %}
<div>
Run Code Online (Sandbox Code Playgroud)
谢谢
在我的烧瓶模板文件中,我包含一个css文件(我省略了样板文件),如下所示:
url_for('static', filename='css/bootstrap.css')
这将呈现为/static/css/bootstrap.css(由于前导斜杠)它被解释为domain.com/static/css/boostrap.css.不幸的是,实际的static文件夹位于一个子目录中:domain.com/projects/test/static/
环境细节:
我的fcgi文件位于~/fcgi-bin文件夹中(主机特定我猜):
$ cat ~/fcgi-bin/test.fcgi
#!/usr/bin/env python2.7
import sys
sys.path.insert(0, "/home/abcc/html/projects/test")
from flup.server.fcgi import WSGIServer
from app import app
class ScriptNameStripper(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['SCRIPT_NAME'] = ''
return self.app(environ, start_response)
app = ScriptNameStripper(app)
if __name__ == '__main__':
WSGIServer(app).run()
Run Code Online (Sandbox Code Playgroud)
和我的.htaccess位于domain.com/projects/test/
$ cat .htaccess
<IfModule mod_fcgid.c>
AddHandler fcgid-script .fcgi
<Files ~ (\.fcgi)>
SetHandler fcgid-script
Options +FollowSymLinks +ExecCGI
</Files>
</IfModule>
<IfModule mod_rewrite.c>
Options …Run Code Online (Sandbox Code Playgroud) 使用Rails 3.2在本地开发时,我会定期收到以下错误消息:
In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers
Run Code Online (Sandbox Code Playgroud)
在一个非常简单的link_to调用中,我的视图抛出了这个错误,这些调用会自动包含这些路由助手,不应该抛出这样的错误.我不认为错误发生在它所说的地方,但为了完整性,我将发布一个示例错误转储:
Completed 500 Internal Server Error in 233ms
ActionView::Template::Error (In order to use #url_for, you must include routing helpers explicitly. For instance, `include Rails.application.routes.url_helpers):
1: <%= form_tag products_path do %>
app/views/layouts/_search_banner.html.erb:1:in `_app_views_layouts__search_banner_html_erb___3528929561490713150_70155778060240'
app/views/pages/new.html.erb:1:in `_app_views_pages_new_html_erb__29715639072237790_70155789748980'
Run Code Online (Sandbox Code Playgroud)
在它出现之前,我能够正确查看我的所有页面; 在它出现之后,刚刚加载的相同页面失败并出现同样的错误.一旦出现错误,修复它的唯一方法是退出并重启我的本地rails服务器.一旦我重新启动服务器,错误就会消失,一切都恢复正常.
此外,此错误仅出现在我的计算机本地 - 代码部署在Heroku上,并且在部署数月内未出现此错误,并且没有其他团队成员在相同代码上运行时发现错误.编辑:在相同代码上运行的其他团队成员确实看到相同的错误.
虽然这个错误有时会突然冒出而没有明显的原因,但我注意到了一些趋势.它经常出现在不同的错误之后.当rails服务器空闲一段时间而不加载任何页面时,它也更有可能出现.
编辑:更多信息Rails版本:3.2.13 Ruby版本:2.0.0
完整的堆栈跟踪可以在这里找到
我通过编写代码在操作中抛出错误,向该操作发送请求,然后尝试访问应用程序中的任何其他页面来实现错误.有趣的是,我试图使用的第一个错误是除零,这没有产生错误.接下来,我为Array []错误创建了一个Undefined Method,这导致了这里描述的错误.
编辑: Rails 2.3样式插件的弃用警告当我部署到Heroku时,我收到以下错误:
DEPRECATION WARNING: You have Rails …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 url_for(:back) 创建一个在用户登录后返回上一页的重定向。
当用户自己进入登录页面时,我已经成功地使用了它。然而,当用户由于访问要求用户进行身份验证的页面而被重定向到登录页面时,重定向会将用户发送回他/她尝试访问权限不足的页面之前的页面。
我正在尝试修改我的登录控制器操作以正确处理重定向。我的计划是在发生强制重定向时使用一个查询字符串参数“重定向”。在控制器中,如果该参数存在,则使用该 URL;否则,将使用 url_for(:back),或者如果这不起作用(由于缺少 HTTP_REFERER),则用户将被重定向到站点的主页。
这是应该实现此逻辑的代码片段:
if params[:redirect]
@url = params[:redirect]
else
@url = url_for :back
@url ||= url_for :controller => "home", :action => "index"
end
Run Code Online (Sandbox Code Playgroud)
我得到的错误是:
用户控制器中的 NoMethodError#login #的未定义方法`back_url' RAILS_ROOT:[模糊] 应用程序跟踪 | 框架跟踪 | 完整跟踪 供应商/rails/actionpack/lib/action_controller/polymorphic_routes.rb:112:in`__send__' 供应商/rails/actionpack/lib/action_controller/polymorphic_routes.rb:112:in`polymorphic_url' 供应商/rails/actionpack/lib/action_controller/base.rb:628:in `url_for' app/controllers/users_controller.rb:16:in`登录' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:76:in `process' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:74:in `synchronize' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/rails.rb:74:in `process' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:159:in`process_client' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in `each' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:158:in`process_client' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in`初始化' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `new' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:285:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in`初始化' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `new' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel.rb:268:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:282:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:281:in `each' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/configurator.rb:281:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:128:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/lib/mongrel/command.rb:212:in `run' /var/lib/gems/1.8/gems/mongrel-1.1.5/bin/mongrel_rails:281 供应商/rails/actionpack/lib/action_controller/polymorphic_routes.rb:112:in`__send__' 供应商/rails/actionpack/lib/action_controller/polymorphic_routes.rb:112:in`polymorphic_url' 供应商/rails/actionpack/lib/action_controller/base.rb:628:in …
我正在Flask中构建一个模块化应用程序,如果我从当前的Blueprint中引用另一个Blueprint中的函数,我会不断收到构建错误,例如我有一个文件userProfiles.py
@userP.route('/myProfile/', methods=['GET'])
def showProfile():
.....
Run Code Online (Sandbox Code Playgroud)
我有另一个文件userAccounts.py
@userA.route('/login/', methods=['GET', 'POST'])
def login():
.....
Run Code Online (Sandbox Code Playgroud)
然后我有一个main.py注册所有的蓝图,并做app.run()
现在我试图从我的showProfile函数做url_for('userA.login),但我不断得到 - werkzeug.routing.BuildError - .我无法解决这个问题,在线解决方案没有帮助我.
PS url_for函数在我的模板中也不起作用,由于某种原因它只是没有拾取函数,我别无选择,只能href到路径.
只是添加一点点信息我根本没有重复功能,所有功能及其名称都是唯一的,url_for路由在每个蓝图中都能正常工作
这是Traceback:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1701, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1689, in wsgi_app
response = self.make_response(self.handle_exception(e))
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1687, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1360, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1358, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1344, in dispatch_request
return …Run Code Online (Sandbox Code Playgroud) Flask的url_for查询字符串是否有字符串限制?
url_for('verify', t='e5e781eef6f1fa9d9062c7831ae7ec5bed3b67ac', _external=True)
Run Code Online (Sandbox Code Playgroud)
返回:
http://127.0.0.1:5000/verify?t=e5e781eef6f1fa9d9062c783
Run Code Online (Sandbox Code Playgroud)
原始字符串为40个字符,生成的查询字符串为24个字符.
这是怎么回事?
在 Nginx 下使用url_forwith _external = True(so :) 时,如何使服务器名称替换本地主机url_for('foobar', _external=True)?
我正在运行一个烧瓶应用程序。
server {
listen 80;
server_name _;
access_log /var/log/nginx/simplemadetutor.access.log;
error_log /var/log/nginx/simplemadetutor.error.log;
location / {
proxy_pass http://127.0.0.1:8000;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
alias /home/implemad/www/simplemadetutor/app/static;
}
location /favicon.ico {
alias /home/implemad/www/simplemadetutor/app/static/img/favicon.ico;
}
}
Run Code Online (Sandbox Code Playgroud)
问题是如果我打字url_for('main.index', _external=True)而不是看到http://simplemadetutor.com我 看到的东西http://127.0.0.1:8000/
我试过设置 SERVER_NAME = 'simplemadetutor.com'; 然而,这似乎将 simplemadetutor.com 放在由 url_for 扩展生成的每个 URL 前面,而不仅仅是那些具有 external=True 的 URL。
我有一个简单的 python Flask 应用程序。当我的一位用户在我的主页上发表评论时,我想将他们直接重定向回主页。目前,我有处理主页和评论的相同路线。它看起来像这样:
@app.route('/home', methods=['POST', 'GET'])
@login_required
def home():
form = CommentForm()
user = User.query.filter_by(username=current_user.username).first()
house = House.query.filter_by(owner_id = current_user.id).first()
neighbors = Neighbors.query.filter_by(houseid=house.id).all()
if user.id == current_user.id:
if form.validate_on_submit():
time = strftime("%a, %b %d %Y %X", localtime())
comment = Commentsection(houseid = house.id, commentbody = form.body.data, times = str(time), commenter=user.username, commenterid=user.id, commenterpic = user.image_file )
db.session.add(comment)
db.session.commit()
link = url_for('add', invite_token=house.linkinv, _external=True)
comments = Commentsection.query.filter_by(houseid=house.id).order_by(Commentsection.id.desc()).all()
return redirect(url_for('home', title='Home', house=house, form=form, comments=comments, link=link, neighbors=neighbors))
else:
link = url_for('add', invite_token=house.linkinv, _external=True)
comments …Run Code Online (Sandbox Code Playgroud)