Django模板URL标记中的条件反向名称

时间:2013-04-27 08:07:33

标签: django django-templates url-pattern

是否可以将包含反向名称的参数传递给Django模板URL标记

例如:

note: In this example conditional_URL is not a reverse name.

urls.py:

urlpatterns = patterns('views',
    url(r'^iframeViewURL/$', 'iframeView', name='iframeView'),
    url(r'^url_a/', 'view_a', name='view_a'),
    url(r'^url_b/', 'view_b', name='view_b'),
)

view.py:

def iframeView(**kwargs):
    kw = kwargs
    if kw['condition']:
        conditional_url = 'view_a'  # name of the URL pattern
    else:
        conditional_url = 'view_b'  # name of the URL pattern
    return render_to_response('iframe.html', {'conditional_URL': conditional_url},
                              context_instance=RequestContext(request, {}))

def view_a(*args):
    pass

def view_b(*args):
    pass

Iframe.html的:

<iframe src="{% url conditional_URL *args %}">
</iframe>

我试试这个但是因为conditional_URL不是任何网址格式的名称而无法正常工作。

2 个答案:

答案 0 :(得分:2)

如果您将{% load url from future %}添加到模板标签,则可以从Django 1.3开始:

{% load url from future %}
<iframe src="{% url conditional_URL arg1 arg2 %}">
</iframe>

在Django 1.5中,不再需要添加{% load url from future %}

有关详细信息,请参阅Django Documentation for the url templatetag中的“前向兼容性”

答案 1 :(得分:1)

不是将url模式的名称传递给模板,而是更容易解析并将实际url传递给模板。

类似的东西:

def iframeView(**kwargs):
    kw = kwargs
    if kw['condition']:
        conditional_url = 'name_a'  # name of the URL pattern
    else:
        conditional_url = 'name_b'  # name of the URL pattern

    return render_to_response('iframe.html', 
                          {'conditional_URL': reverse(conditional_url)},
                              context_instance=RequestContext(request, {}))

然后在模板中

<iframe src="{{conditional_URL}}"> </iframe>