是否有可能构造一个正则表达式来捕获所有出现的由字符序列分隔的文本?换句话说,我正在寻找一种等效的标准.split()
方法。
我不能使用split()
,因为正则表达式用于指定Tornado Web应用程序的URL路由。例如:
handlers = [
(r'/posts/([0-9a-zA-Z_\-]+)', PostsHandler),
]
Run Code Online (Sandbox Code Playgroud)
当为在Tornado,Django或任何其他实现Routes模式的Web框架上构建的Web应用程序指定URL路由时,这样的正则表达式会派上用场。特别是将未知长度的URL路径解析为参数列表。
到目前为止,我设法提出了以下正则表达式:
/^\/posts(?:\/([a-zA-Z0-9_\-]+))+/
Run Code Online (Sandbox Code Playgroud)
不幸的是,当表达式匹配时/posts/show/some-slug/15
,它仅返回最后一个匹配组(15
),而不是['show', 'some-slug', '15']
。
我想要实现的是:
/posts/edit/15/
=> ['edit', '15']
/posts/edit/15
=> ['edit', '15']
/posts/2010/15/11
=> ['2010', '15', '11']
我的Rails3项目中有以下路由:
match "/blog/:permalink" => "posts#show", :as => :post
Run Code Online (Sandbox Code Playgroud)
当我通过视图链接到我的帖子时:
<%= link_to @post.title, post_path(@post) %>
Run Code Online (Sandbox Code Playgroud)
帖子的id传递给post_path帮助器(即使我的路由指定了永久链接传递.
如何强制post_path发送永久链接而不是帖子的id?我可以明确地打电话,post_path(@post.permalink)
但这看起来很脏.
我在路线上遗漏了什么吗?
谢谢!
我目前正在研究CakePHP 2.0,并希望将旧的1.3项目转换为2.0.我将从头开始,因为项目中有很多代码可以更好.
其中一个是动态URL,项目多语言甚至URL都会更改为所选语言.例如:
英语:/pages/new-article
荷兰语:/paginas/nieuw-artikel
两者都会去 PagesController::display();
注意:URL可以更长,页面可以有子页面,也可以添加到URL中.例如:/pages/new-article/article-subpage
现在,我之前采用的方式是为所有事情做一个特定行动的路线.喜欢*去PagesController::index();
然而,这似乎减慢了应用程序的速度,并带来了很多问题.
所以我的问题是,有更简单的方法吗?
我不想硬编码任何东西,我应该能够更改/pages/article
为/page/article
无需更改代码.
注意:如果您知道在1.2或1.3中执行此操作的方法,那也将是很好的,2.0并没有那么不同.
我正在使用jQuery地址库来重写我的URL,具体取决于用户在页面中执行的操作.目的是允许用户为页面添加书签并稍后返回.页面永远不会刷新,因为所有服务器交互都是通过ajax完成的.
jQuery Address正在写这样的URL:
HTTP://本地主机:9000 /#/ U/scott_tiger
我需要在Play中设置路由,以便能够将该请求路由到适当的控制器.所以我设置了这个:
GET /#/u/{username} Controller.showUser
Run Code Online (Sandbox Code Playgroud)
但这不起作用,路由定义被忽略.我尝试过很多东西,例如试图逃避"#"并用一个我用Character.toString(35)填充的变量替换它.这些都不起作用.
有谁知道如何正确定义路由或获取jQuery地址不写"#".
编辑:"#"没有被发送到服务器做它.卫生署!好的,问题被修改了.
我是Codeigniter的新手,我试图通过将旧网站转换为CI来习惯它.
我无法理解的一件事是路由.如果我不想拥有像/ controller/method/id这样的url结构,我必须将它更改为$route['controller/(:num)'] = "controller/method/$1";
routes.php中的内容.这对我来说似乎效率低下,我还应该做些什么吗?
例如,在我的网站上,网址是/ game/4242和/ player/SomeDude
我有一个L3应用程序,我正在尝试移植到L4.在L3版本中,我的一条路线是
Route::get('/(:any)/(:all?)', etc...
Run Code Online (Sandbox Code Playgroud)
这允许我处理任意数量的URL段,例如:
/contact_page
/store_category
/store_category/shirts_category
/store_category/shirts_category/specific_shirt_page
/an/arbitrary/number/of/nested/categories
Run Code Online (Sandbox Code Playgroud)
但是在L4中我无法弄清楚如何模仿(:all?)的功能
以下代码有效:
Route::get('/{arg1?}/{arg2?}/{arg3?}', function($arg1='home', $arg2, $arg3)
{
//do something
});
Run Code Online (Sandbox Code Playgroud)
所以我可以添加大量的可选参数(超过我认为在实际使用中我会需要的),但这不是很优雅.
在Laravel 4中是否有某种方法来定义可以响应任意数量的URL段的Route?
我正在尝试javascriptRoutes
在Play 2(Scala)中使用,我收到错误(见下文).这是我做的:
javascriptRoutes
方法到Application
控制器def javascriptRoutes = Action { implicit request =>
import routes.javascript._
Ok(Routes.javascriptRouter("jsRoutes")(Orders.searchProducts))
.as("text/javascript")
}
Run Code Online (Sandbox Code Playgroud)
routes
文件GET /assets/javascripts/routes controllers.Application.javascriptRoutes
Run Code Online (Sandbox Code Playgroud)
<script>
导入到main.scala.html
<head>
...
<script type="text/javascript" src="@routes.Application.javascriptRoutes"></script>
...
</head>
Run Code Online (Sandbox Code Playgroud)
有了这些更改,我在JavaScript控制台中收到以下错误:
GET http://localhost:9000/assets/javascripts/routes 404 (Not Found)
Uncaught ReferenceError: jsRoutes is not defined
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
设置url_for()
在Jinja2的模板的是非常简单的(只要它在HTML).我一直在尝试从JQuery内部设置它,如下所示:
<script>
function my_func(key) {
var newHref = sprintf("{{url_for('fig', selector='%s')}}", key);
$('#my_id').attr('href', newHref);
}
<script>
Run Code Online (Sandbox Code Playgroud)
其中sprintf
仅仅是jQuery的一个标准的字符串格式化功能.
现在什么都没发生.
我也用onClick
功能代替了它href
.它看起来像这样:
function my_Clicked(key) {
$.ajax({
type: 'GET',
url: sprintf("{{ url_for('fig', selector = '%s')}}", key)
});
}
Run Code Online (Sandbox Code Playgroud)
再次,<button>
单击时没有任何反应.
这甚至可能吗?Jinja2/Flask标记{{ }}
似乎只出现在HTML中,并在加载页面时进行处理.但是,我不明白为什么在页面加载后设置动态URL是不可能的,因此当您单击它时,请求只会被发送回服务器.
编辑 使用odai alghamdi建议的扩展后,我遇到了一个令人困惑的问题.
我正在进行onClick
AJAX调用<button>
.它现在看起来像这样:
function cropzoneClicked(key) {
$.ajax({
type: 'GET',
url: flask_util.url_for('fig', {selector:key})
});
}
Run Code Online (Sandbox Code Playgroud)
但是,单击按钮时没有任何反应.我知道正在调用该函数,因为我可以在那里发出警报.但是,没有任何内容被呈现,'GET'
请求也没有返回成功的回调
我可以毫无问题地从Windows应用程序访问我的Web API服务器.但是,从Android来看,却是另一回事
那为什么会这样?
"localhost"使用错误的东西(在URL中)?我应该使用计算机的名称吗?
字符串(字面意思为" http://localhost:28642/api/Departments/GetCount?serialNum=4242
")是否需要逐字逐句?
调用REST方法的Windows应用程序和调用相同REST方法的Android应用程序之间的区别是什么会导致后者失败(连接被拒绝)?
android url-routing asp.net-mvc-routing asp.net-web-api econnrefused
<a href="{{ url('affiliate', affiliate=object.slug) }}">{{ object.name }} </a>
Run Code Online (Sandbox Code Playgroud)
导致错误:reverse()得到一个意外的关键字参数'affiliate'