使用额外选项反转Django网址 [英] Reversing Django URLs With Extra Options
问题描述
'foo'
和'bar'
是 page_slug
。 urlpatterns = patterns('',
r'^ page /(?P< page_slug>。*)/','myapp.views.someview'),
)
然后,我可以使用下面的URL重建URL吗?
>> ;>来自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'}),
)
我预计这个结果:
>>>来自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结构的细节(封装和所有这些)。
你应该尝试命名你的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'),
)
>>>来自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文件
Suppose I have a URLconf like below, and 'foo'
and 'bar'
are valid values for page_slug
.
urlpatterns = patterns('',
(r'^page/(?P<page_slug>.*)/', 'myapp.views.someview'),
)
Then, I could reconstruct the URLs using the below, right?
>>> 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/'
But what if I change my URLconf to this?
urlpatterns = patterns('',
(r'^foo-direct/', 'myapp.views.someview', {'page_slug': 'foo'}),
(r'^my-bar-page/', 'myapp.views.someview', {'page_slug': 'bar'}),
)
I expected this result:
>>> 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/'
However, this throws a NoReverseMatch
exception. I suspect I'm trying to do something impossible. Any suggestions on a saner way to accomplish what I want?
Named URLs aren't an option, since I don't want other apps that link to these to need to know about the specifics of the URL structure (encapsulation and all that).
You should try naming your urlconfs. Example:
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'),
)
Then just edit your reverses and you should get it working.
>>> 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/'
More info at: Django Docs
这篇关于使用额外选项反转Django网址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!