当前位置:  开发笔记 > 编程语言 > 正文

使用额外选项反转Django URL

如何解决《使用额外选项反转DjangoURL》经验,为你挑选了2个好方法。

假设我有一个类似于下面的URLconf,'foo'并且'bar'是有效值page_slug.

urlpatterns = patterns('',
    (r'^page/(?P.*)/', 'myapp.views.someview'),
)

然后,我可以使用下面的方法重建URL,对吗?

>>> from django.core.urlresolvers import reverse
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'foo'})
'/page/foo/'
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'bar'})
'/page/bar/'

但是,如果我将URLconf更改为此怎么办?

urlpatterns = patterns('',
    (r'^foo-direct/', 'myapp.views.someview', {'page_slug': 'foo'}),
    (r'^my-bar-page/', 'myapp.views.someview', {'page_slug': 'bar'}),
)

我期待这个结果:

>>> from django.core.urlresolvers import reverse
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'foo'})
'/foo-direct/'
>>> reverse('myapp.views.someview', kwargs={'page_slug': 'bar'})
'/my-bar-page/'

但是,这会引发NoReverseMatch异常.我怀疑我正在尝试做一些不可能的事情.有什么建议可以实现我想要的更好的方式吗?

命名URL不是一个选项,因为我不希望链接到这些的其他应用程序需要知道URL结构的细节(封装和所有这些).



1> toqueteos..:

你应该尝试命名你的urlconfs.例:

urlpatterns = patterns('',
    url(r'^foo-direct/', 'myapp.views.someview', {'page_slug': 'foo'}, name='foo-direct'),
    url(r'^my-bar-page/', 'myapp.views.someview', {'page_slug': 'bar'}, name='bar-page'),
)

然后只需编辑你的反转,你应该让它工作.

>>> from django.core.urlresolvers import reverse
>>> reverse('foo-direct', kwargs={'page_slug': 'foo'})
'/foo-direct/'
>>> reverse('bar-page', kwargs={'page_slug': 'bar'})
'/my-bar-page/'

更多信息:Django Docs



2> S.Lott..:

这就是我们的工作.

urls.py有这样的模式

url(r'^(?P< datarealm >.*?)/json/someClass/(?P.*?)/$', 'json_someClass_resource', ),

views.py作为这样的反向调用

    object = SomeModel.objects.get(...)
    url= reverse('json_someClass_resource', kwargs={'object_id':object.id,'datarealm':object.datarealm.name})

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有