包含名称空间的 url 之前的 django url 参数
Posted
技术标签:
【中文标题】包含名称空间的 url 之前的 django url 参数【英文标题】:django url parameters before include url with namespace 【发布时间】:2012-11-27 02:32:04 【问题描述】:在我的最后一个问题中,我询问了如何在包含 urls.py 之前让 url 为参数工作,并且它起作用了。 Django % url % when urls with parameters like: url(r'^foo/<parameter>/$', include(some.urls))
现在我想使用相同的包含 urls.py with namespaces。
urls.py
urlpatterns = patterns('',
url(r'^/foo/(?P<parameter_1>\d+)/', include('bar.urls', namespace='foo', app_name='foo')),
)
bar.urls.py
urlpatterns = patterns('',
url(r'^/bar/$', 'bar.views.index', name='bar'),
url(r'^/bar/(?P<parameter_2>\d+)/$', 'bar.views.detail', name='bar_detail'),
)
要获取我使用的模板中的 url:
1. % url foo:bar parameter_1=1 % or % url for:bar 1 %
2. % url foo:bar_detail parameter_1=1 parameter_2=1 % or % url foo:bar_detail 1 1 %
我希望得到以下网址:1./foo/1/bar/
和 2./foo/1/bar/1
,但它不起作用。
有趣:如果我打电话:
1. % url foo:bar %
2. % url foo:bar_detail parameter_2=1 % or % url foo:bar_detail 1 %
我得到了网址:
1./foo/(?P<parameter_1>%5Cd+)/bar/
和
2./foo/(?P<parameter_1>%5d+)/bar/1
我的问题:我的代码有问题还是代码没有用,我想做什么。
【问题讨论】:
【参考方案1】:我再次搜索并找到了故障。 /django/core/urlresolvers.py
中有一个错误。
我在https://code.djangoproject.com/ticket/11559#no1找到了票。
要解决此问题,您必须将 /django/core/urlresolvers.py
替换为来自 https://github.com/django/django/commit/02dcbe3317 的更改文件。
使用python manage.py runserver
重新启动def-server 后,url-tags 被正确解析。我从% url foo:bar 1 %
得到/foo/1/bar/
而不是/foo/(?P<parameter_1>%5Cd+)/bar/
。
【讨论】:
有趣!我有同样的问题,发现这是 django 的反向方法中的一个错误。不幸的是,我的项目使用的是(痛苦的)旧版本的 Django(1.3)。我最终更改了 url 结构,因此父 urlconf 没有捕获任何参数。但是你知道解决这个问题的方法吗,这并不意味着更新到最新的 django 版本? (我想这是我最终会做的事情)以上是关于包含名称空间的 url 之前的 django url 参数的主要内容,如果未能解决你的问题,请参考以下文章
Django 'resolve':获取 url 名称而不是 view_function