带有主干路由器和 django url 的 DRY url?

Posted

技术标签:

【中文标题】带有主干路由器和 django url 的 DRY url?【英文标题】:DRY url with backbone router and django urls? 【发布时间】:2014-06-07 20:20:45 【问题描述】:

在 django 中,% url 'url_name' % obj_instance.get_absolute_url 用于 url,实际 url 定义在 urls.py 中

我最近开始使用骨干路由器,它的形式是

routes: 
 '..some/url/path/:param_name/': 'func_name'

是否可以在骨干路由器中使用django的url相关功能来保持url的干性?

编辑

我在主干路由中使用the/whole/relative/path/from/root。 这是骨干网的坏习惯吗? (这是我第一次使用路由器。)

之所以需要绝对路径,是因为我想在多个应用程序中进行路由,如下所述。

我有 3 个应用程序显示以下内容。

    所有音乐列表 (/forum) 专辑中所有音乐的列表 (/album/:album_id) 音乐详情 (/album/:album_id/music/:music_id)

如果用户进入#1,通过点击音乐,他可以转到#3。 从#3,他可以去#2或#1。

【问题讨论】:

【参考方案1】:

据我了解,在 Django 中,您定义了紧跟在域之后的 url。在主干路由器中,您定义“#”标签之后的 url。因此,例如,如果您输入两个不同的域而没有任何参数并调用相同的骨干路由器,则它们都将被捕获为空 url。

var Router = Backbone.Router.extend(
    routes: 
        "": "defaultFunc"  //nothing after # (it doesn't care about the url before that)
        "posts/:id": "getPost" // #posts/12
    
);

最后,我认为每个人都必须做好自己的工作。 Django 用于服务器端 url 及其参数,以及用于客户端的主干。

【讨论】:

感谢您的输入,我使用“the/whole/absolute/path”作为主干路由,这是一个不好的做法吗?我已经更新了问题。 它有效吗?取决于您希望如何在 Django 和 Backbone 之间分配工作。如果你输入: /album/mydisc/#song/mySong -> /album/mydisc 的模板将加载 Django 模板引擎,然后 Backbone 将为歌曲做工作。如果您想将所有内容委托给主干,您应该输入:#album/mydisc/song/mySong 我可以正常工作,除了一种情况“转到#1 #3”和“返回按钮到#1”不显示#1 页面。我在服务器 url 中也有所有三个 url。

以上是关于带有主干路由器和 django url 的 DRY url?的主要内容,如果未能解决你的问题,请参考以下文章

Django——路由基础

在主干应用程序中获取以前的路由器/url

访问 URL 时是不是可以完全摆脱主干上的哈希?

django中url路由配置及渲染方式

django url调度

Django:DRY 与逻辑分离有根本冲突吗?