包含名称空间的 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&lt;parameter_1&gt;%5Cd+)/bar/ 和 2./foo/(?P&lt;parameter_1&gt;%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&lt;parameter_1&gt;%5Cd+)/bar/

【讨论】:

有趣!我有同样的问题,发现这是 django 的反向方法中的一个错误。不幸的是,我的项目使用的是(痛苦的)旧版本的 Django(1.3)。我最终更改了 url 结构,因此父 urlconf 没有捕获任何参数。但是你知道解决这个问题的方法吗,这并不意味着更新到最新的 django 版本? (我想这是我最终会做的事情)

以上是关于包含名称空间的 url 之前的 django url 参数的主要内容,如果未能解决你的问题,请参考以下文章

Django 'resolve':获取 url 名称而不是 view_function

Django 2.2.3 如何获取所有 urls 模式和所有视图名称

URL路由系统-命名空间

如何从名称空间的 Django URL 中获取绝对字符串?

django'url'模板标签错误

django-url调度器-中级篇