是否可以将包含反向名称的参数传递给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不是任何网址格式的名称而无法正常工作。
答案 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>