Django {% url %} 当 url 带有如下参数时: url(r'^foo/<parameter>/$', include(some.urls))

pha*_*rfe 5 python django django-templates

我没有找到任何解决方案,如何使用以下配置获取模板中的url(使用Django1.3):

urls.py

urlpatterns = patterns('',
    url(r'^/foo/(?P<parameter>\d+)/$', include('bar.urls'), name='foo-url'),
    )
Run Code Online (Sandbox Code Playgroud)

包含的 url-conf:

酒吧.urls.py

urlpatterns = patterns('',
    (r'^/bar/$', 'bar.views.index'),
    url(r'^/bar/(?P<parameter2>\d+)/$', 'bar.views.detail', name='bar-url'),
    )
Run Code Online (Sandbox Code Playgroud)

酒吧视图.py

def detail(request, parameter, parameter2):
    obj1 = Foo.objects.get(id=parameter)
    obj2 = Bar.objects.get(id=parameter2)
Run Code Online (Sandbox Code Playgroud)

现在我尝试使用以下方法获取模板中的网址:

{% url bar-url parameter=1 parameter2=2 %}
Run Code Online (Sandbox Code Playgroud)

我期望得到:/bar/1/foo/2/

在这种情况下可以使用 {% url %} 吗?

Cal*_*eng 4

是的,您可以这样获取您的网址:-

{% url 'bar-url' 1 2 %}
Run Code Online (Sandbox Code Playgroud)

但请注意,您的 url 配置实际上应该是这样的:-

urls.py

urlpatterns = patterns('',
    url(r'^/foo/(?P<parameter>\d+)/, include('bar.urls')),
)
Run Code Online (Sandbox Code Playgroud)

酒吧.urls.py

urlpatterns = patterns('',
    (r'^/bar/$, 'bar.views.index'),
    url(r'^/bar/(?P<parameter2>\d+)/$, 'bar.views.detail', name='bar-url'),
)
Run Code Online (Sandbox Code Playgroud)

除非foo-url你专门映射:-

urls.py

urlpatterns = patterns('',
    url(r'^/foo/(?P<parameter>\d+)/$, 'another.views.foo', name='foo'),
    url(r'^/foo/(?P<parameter>\d+)/, include('bar.urls')),
)
Run Code Online (Sandbox Code Playgroud)

请注意,这$意味着正则表达式的结束。