0

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

例如:

note: In this example条件网址is not a reverse name.

网址.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'),
)

视图.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 不是任何 url 模式的名称。

4

2 回答 2

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 文档中url的“转发兼容性”

于 2013-04-27T08:37:20.390 回答
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>
于 2013-04-27T08:32:57.053 回答