2013-04-27 1 views
0

Можно ли передать аргумент содержит обратное имя для Django шаблон URL тегаУсловный обратное имя в Django шаблон URL тега

Например:

note: In this exampleconditional_URLis 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'), 
) 

вид.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.

ответ

2

Это возможно, так как Django 1.3, если добавить {% load url from future %} к вашему templatetag:

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

В Django 1.5 это больше не нужно добавлять {% load url from future %}.

Смотрите «Forwards совместимости» в Django Documentation for the url templatetag для получения дополнительной информации

+0

Спасибо за отзыв –

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> 
+0

Ok это выглядит довольно просто, но как насчет * аргументы в {% URL%} приведенном выше примере? –

+1

Слишком много '' '' в операторе return, и этот 'conditional_url_actual =' является синтаксической ошибкой. –

+0

@BurhanKhalid, спасибо за указание! – Rohan