当我打电话url_for('index')
它会产生,'/'
但有时候我会喜欢它生成'domain.tld/'
.我在文档中找不到我要指定的内容.我只需要做'domain.tld/%s' % url_for('index')
什么?
使用flask时,在Javascript文件中创建动态URL的推荐方法是什么?在jinja2模板和python视图url_for
中使用,在.js
文件中执行此操作的建议方法是什么?因为它们不是由模板引擎解释的.
基本上想做的是:
// in comments.js
$.post(url_for('comment.comment_reply'));
Run Code Online (Sandbox Code Playgroud)
这是不可能的.
但很自然地,我可以在模板中执行它:
<script>
$.post(url_for('comment.comment_reply'));
</script>
Run Code Online (Sandbox Code Playgroud) 在我的Flask应用程序中,我有一个显示帖子的视图
@post_blueprint.route('/post/<int:year>/<int:month>/<title>')
def get_post(year,month,title):
# My code
Run Code Online (Sandbox Code Playgroud)
要显示最后10个条目,我有以下视图:
@post_blueprint.route('/posts/')
def get_all_posts():
# My code
return render_template('p.html',posts=posts)
Run Code Online (Sandbox Code Playgroud)
现在,当我显示最后10个帖子时,我想将帖子的标题转换为超链接.目前我必须在我的jinja模板中执行以下操作来实现此目的:
<a href="/post/{{year}}/{{month}}/{{title}}">{{title}}</a>
Run Code Online (Sandbox Code Playgroud)
有没有办法避免硬编码网址?
就像url_for
用于创建Flask网址的函数一样:
url_for('view_name',**arguments)
Run Code Online (Sandbox Code Playgroud)
我试过寻找一个,但我,我找不到它.
在我的应用程序中,我有一些API在api域下.现在在其中一个API中我想生成一个指向主域的URL,比方说
test.com/blabla...
Run Code Online (Sandbox Code Playgroud)
我试图使用 url_for,但似乎默认的root_url或request.host在api域中.Url_for将成为现实
api.test.com/blabla..
Run Code Online (Sandbox Code Playgroud)
虽然我想要它
test.com/blabla...
Run Code Online (Sandbox Code Playgroud)
Url_for可以带参数
host: ...
Run Code Online (Sandbox Code Playgroud)
将它设置为test.com/,问题是如何获取主机的root/base url(test.com)? root_url或request.host都是api.test.com.
有任何想法吗?谢谢.
url_for([:edit, @post])
Run Code Online (Sandbox Code Playgroud)
工作和生成/comments/123/edit
.现在我需要添加一个查询参数,以便代替
/comments/123/edit
Run Code Online (Sandbox Code Playgroud)
它是
/comments/123/edit?qp=asdf
Run Code Online (Sandbox Code Playgroud)
我试过url_for([:edit, @post], :qp => "asdf")
但没有去.
在类似问题的互联网上找到一两个人,但没有看到任何地方发布的解决方案.我从下面的代码/模板中得到了构建错误,但无法确定问题的位置或原因.似乎模板没有识别该功能,但不知道为什么会发生这种情况.任何帮助将不胜感激 - 现在已经敲了两下我的键盘.
功能:
@app.route('/viewproj/<proj>', methods=['GET','POST'])
def viewproj(proj):
Run Code Online (Sandbox Code Playgroud)
...
模板摘录:
{% for project in projects %}
<li>
<a href="{{ url_for('viewproj', proj=project.project_name) }}">
{{project.project_name}}</a></li>
{% else %}
No projects
{% endfor %}
Run Code Online (Sandbox Code Playgroud)
错误日志:https: //gist.github.com/1684250
编辑:还想包括它在构建URL时没有识别变量"proj",所以它只是将值附加为参数.这是一个例子:// myproject/viewproj?projname = what + up
最后几行:
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] File "/srv/www/myproject.com/myproject/templates/layout.html", line 103, in top-level template code, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 2012] [error] [client 199.58.143.128] {% block body %}{% endblock %}, referer: xx://myproject.com/
[Wed Jan 25 09:47:34 …
Run Code Online (Sandbox Code Playgroud) 我正在使用ActionMailer发送注册确认电子邮件.电子邮件需要包含一个返回网站的链接以验证用户,但我无法说服Rails生成完整的URL(包括域等).
我正在使用:
<%= url_for :controller => 'login', :action => 'verify', :guid => @user.new_user.guid, :only_path => false, :host => 'http://plantality.com' %>
Run Code Online (Sandbox Code Playgroud)
在我看来
在开发模式下,如果我没有在上面的链接中指定主机explicilty,则Rails会抱怨.但我不想在制作中这样做.有解决方案吗
在Rails中,是否可以在模块中命名模型并仍然从中获得正确的行为url_for
?
例如,在这里,url_for
按预期工作:
# app/models/user.rb
class User < ActiveRecord::Base
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # /users/1
Run Code Online (Sandbox Code Playgroud)
将User
模型放入模块后,url_for
抱怨一个未定义的方法m_user_path
:
# app/models/m/user.rb
module M
class User < ActiveRecord::Base
end
end
# config/routes.rb
resources :users
# app/views/users/index.html.haml
= url_for(@user) # undefined method 'm_users_path'
Run Code Online (Sandbox Code Playgroud)
是否有可能有url_for
忽略模块M::User
,并返回user_path
用于url_for(@user)
代替m_user_path
?
UPDATE
所以,经过近5年的时间,这是解决方案,感谢esad.这已在Rails 4.2中测试过.
# app/models/m/user.rb
module M
class User < ActiveRecord::Base
end
end
# app/models/m.rb
module M …
Run Code Online (Sandbox Code Playgroud) 我想用BottlePy返回一个html模板.这很好用.但是如果我在我的tpl文件中插入这样的javascript文件:
<script type="text/javascript" src="js/main.js" charset="utf-8"></script>
Run Code Online (Sandbox Code Playgroud)
我收到404错误. (无法加载资源:服务器响应状态为404(未找到))
有谁知道如何解决这个问题?
这是我的脚本文件:
from bottle import route, run, view
@route('/')
@view('index')
def index():
return dict()
run(host='localhost', port=8080)
Run Code Online (Sandbox Code Playgroud)
这是模板文件,位于"./views"子文件夹中.
<!DOCTYPE html>
<html lang="de">
<head>
<meta charset="utf-8" />
<script type="text/javascript" src="js/main.js" charset="utf-8"></script>
</head>
<body>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
也许它是从开发服务器查找我的js文件的"rootPath/js/main.js"?
文件的结构是:
app.py
-js
main.js
-views
index.tpl
Run Code Online (Sandbox Code Playgroud)
谢谢.
大家!
我在使用jinja2 url_for()函数时遇到了问题.
我有一条路线:
@app.route('/article/<int:article_id>/<url_title>/', methods=['GET'])
def article_page(article_id, url_title):
article = Article.query.get(article_id)
if article == None:
abort(404)
return render_template('article.html', article=article)
Run Code Online (Sandbox Code Playgroud)
在jinja模板文件中,我想创建一个链接到article_page的URL,所以我这样写:
<h5>
<a href="{{ url_for('article_page',article_id=article.id,url_title=article.url_title) }}">{{ article.title }}</a>
</h5>
Run Code Online (Sandbox Code Playgroud)
但是当我运行这个页面时,我收到一个错误:
raise BuildError(endpoint, values, method)
BuildError: ('article_page', {'article_id': 1}, None)
Run Code Online (Sandbox Code Playgroud)
好像第二个参数'url_title'缺失了.如何正确使用带有多个参数的url_for()?感谢大家!
url-for ×10
python ×6
flask ×5
javascript ×2
jinja2 ×2
actionmailer ×1
bottle ×1
build-error ×1
host ×1
namespaces ×1
templates ×1
werkzeug ×1